新闻客户端案例——(AsycHttpClient,SmartImageView,JSON)
来源:互联网 发布:算法导论epub 编辑:程序博客网 时间:2024/06/18 11:06
运行效果图:
注意:
1.该程序运行前一定要开启Tomcat服务器,在Tomcat服务器根目录下找到bin文件夹,找到 startup.bat,点击运行开启服务器。
2.添加Json包的过程:
主界面代码:
?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity" android:orientation="vertical"> <FrameLayout android:layout_width="match_parent" android:layout_height="match_parent"> <LinearLayout android:id="@+id/loading" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" android:orientation="vertical" android:visibility="invisible"> <ProgressBar android:layout_width="wrap_content" android:layout_height="wrap_content" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="正在加载信息..." /> </LinearLayout> <ListView android:id="@+id/lv_news" android:layout_width="match_parent" android:layout_height="match_parent" /> </FrameLayout></LinearLayout>
ListView的item:
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="65dp"> <com.loopj.android.image.SmartImageView android:id="@+id/siv_icon" android:layout_width="80dp" android:layout_height="60dp" android:scaleType="centerCrop" android:src="@mipmap/ic_launcher" android:layout_alignParentLeft="true" android:layout_alignParentStart="true"></com.loopj.android.image.SmartImageView> <TextView android:id="@+id/tv_title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="5dp" android:layout_marginTop="10dp" android:layout_toRightOf="@id/siv_icon" android:ellipsize="end" android:maxLength="20" android:singleLine="true" android:text="我是标题" android:textColor="#000000" android:textSize="18sp" /> <TextView android:id="@+id/tv_description" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@id/tv_title" android:layout_marginLeft="5dp" android:layout_marginTop="5dp" android:layout_toRightOf="@id/siv_icon" android:ellipsize="end" android:maxLength="16" android:maxLines="1" android:text="我是描述" android:textColor="#99000000" android:textSize="14sp" /> <TextView android:id="@+id/tv_type" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_alignParentRight="true" android:layout_marginBottom="5dp" android:layout_marginRight="10dp" android:text="评论" android:textColor="#99000000" android:textSize="12sp" /></RelativeLayout>
json文件的实体类:
package cn.edu.bzu.mynews.entity;/** * Created by lm on 2017/5/18. */public class NewsInfo { private String iconPath; private String title; private String description; private int type; private long comment; public String getIconPath() { return iconPath; } public void setIconPath(String iconPath) { this.iconPath = iconPath; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } public int getType() { return type; } public void setType(int type) { this.type = type; } public long getComment() { return comment; } public void setComment(long comment) { this.comment = comment; }}
json解析类:
package cn.edu.bzu.mynews.Tools;import com.google.gson.Gson;import com.google.gson.reflect.TypeToken;import java.lang.reflect.Type;import java.util.List;import cn.edu.bzu.mynews.entity.NewsInfo;/** * Created by lm on 2017/5/18. */public class JsonParse { public static List<NewsInfo> getNewInfo(String json){ Gson gson=new Gson(); Type listType=new TypeToken<List<NewsInfo>>(){ }.getType(); List<NewsInfo> newsInfos=gson.fromJson(json,listType); return newsInfos; }}
适配器:
package cn.edu.bzu.mynews.adapter;/** * Created by lm on 2017/5/18. */import android.content.Context;import android.graphics.Color;import android.support.annotation.NonNull;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.ArrayAdapter;import android.widget.TextView;import com.loopj.android.image.SmartImageView;import java.util.List;import cn.edu.bzu.mynews.R;import cn.edu.bzu.mynews.entity.NewsInfo;public class NewAdapter extends ArrayAdapter<NewsInfo>{private int resourceID; public NewAdapter(Context context, int resource, List<NewsInfo> objects) { super(context, resource, objects); resourceID=resource; } @Override public View getView(int position, View convertView, ViewGroup parent) { NewsInfo newsInfos=getItem(position); View view; ViewHolder viewHolder; if(convertView==null){ view=LayoutInflater.from(getContext()).inflate(resourceID,null); viewHolder=new ViewHolder(); viewHolder.siv=(SmartImageView)view.findViewById(R.id.siv_icon); viewHolder.tv_title=(TextView)view.findViewById(R.id.tv_title); viewHolder.tv_description=(TextView)view.findViewById(R.id.tv_description); viewHolder.tv_type=(TextView)view.findViewById(R.id.tv_type); view.setTag(viewHolder); }else{ view=convertView; viewHolder= (ViewHolder) view.getTag(); } viewHolder.siv.setImageUrl(fruit.getIconPath(),R.drawable.a,R.drawable.ic_launcher); viewHolder.tv_title.setText(fruit.getTitle()); viewHolder.tv_description.setText(fruit.getDescription()); int type=fruit.getType(); switch (type){ case 1: viewHolder.tv_type.setText("评论:"+fruit.getComment()); viewHolder.tv_type.setTextColor(Color.BLUE); break; case 2: viewHolder.tv_type.setText("专题"); viewHolder.tv_type.setTextColor(Color.BLACK); break; case 3: viewHolder.tv_type.setText("LIVE"); viewHolder.tv_type.setTextColor(Color.RED); break; } return view; } class ViewHolder{ SmartImageView siv; TextView tv_title; TextView tv_description; TextView tv_type; }}
MainActivity:
package cn.edu.bzu.mynews;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.View;import android.widget.LinearLayout;import android.widget.ListView;import android.widget.Toast;import com.loopj.android.http.AsyncHttpClient;import com.loopj.android.http.AsyncHttpResponseHandler;import java.io.UnsupportedEncodingException;import java.util.ArrayList;import java.util.List;import cn.edu.bzu.mynews.Tools.JsonParse;import cn.edu.bzu.mynews.adapter.NewAdapter;import cn.edu.bzu.mynews.entity.NewsInfo;import cn.edu.bzu.mynews.model.Fruit;public class MainActivity extends AppCompatActivity { private ListView Iv_news; private NewAdapter newAdapter; private List<NewsInfo> newInfos; private LinearLayout loading; private JsonParse jsonParse; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Iv_news= (ListView) findViewById(R.id.lv_news); newAdapter =new NewAdapter(this,R.layout.news_item,newInfos); loading= (LinearLayout) findViewById(R.id.loading); prepareData(); } private void prepareData() { AsyncHttpClient asyncHttpClient=new AsyncHttpClient(); asyncHttpClient.get(getString(R.string.serverurl), new AsyncHttpResponseHandler() { @Override public void onSuccess(int i, cz.msebera.android.httpclient.Header[] headers, byte[] bytes) { try { String json=new String(bytes,"utf-8"); newInfos=jsonParse.getNewInfo(json); if(newInfos==null){ Toast.makeText(MainActivity.this,"解析失败",Toast.LENGTH_SHORT).show(); } else { loading.setVisibility(View.INVISIBLE); Iv_news.setAdapter(newAdapter); } } catch (UnsupportedEncodingException e) { e.printStackTrace(); } } @Override public void onFailure(int i, cz.msebera.android.httpclient.Header[] headers, byte[] bytes, Throwable throwable) { Toast.makeText(MainActivity.this,"请求失败",Toast.LENGTH_SHORT).show(); } }); }}
新闻的具体内容(NewsInfo):
在tomca的安装目录下打开webapps文件,将NewsInfo.xml文件放置在root文件下。在线json编辑器:http://www.qqe2.com/json
注意的值代表图片的地址,因此需要在ROOT,目录下创建一个images的文件夹,添加相应的照片。
图片素材:
最后添加权限:
<uses-permission android:name="android.permission.INTERNET"/>
[ { "icon": "http://192.168.1.109:8080/images/a.jpg", "title": "科技温暖世界", "content": "进入一个更有爱的领域", "type": "1", "comment": "69" }, { "icon": "http://172.20.103.1:8080/images/b.jpg", "title": "《神武》", "content": "新美术资源盘点,视觉新体验", "type": "2", "comment": "35" }, { "icon": "http://172.20.103.1:8080/images/c.jpg", "title": "南北车正式公布合并", "content": "南北车将于今日正式公布合并", "type": "3", "comment": "2" }, { "icon": "http://172.20.103.1:8080/images/d.jpg", "title": "萌呆了!汪星人抱玩偶酣睡", "content": "汪星人抱玩偶酣睡,萌翻网友", "type": "1", "comment": "25" }, { "icon": "http://172.20.103.1:8080/images/e.jpg", "title": "风力发电进校园", "content": "风力发电普进校园", "type": "2", "comment": "26" }, { "icon": "http://172.20.103.1:8080/images/f.jpg", "title": "地球一小时", "content": "地球熄灯一小时", "type": "1", "comment": "23" }, { "icon": "http://172.20.103.1:8080/images/g.jpg", "title": "最美公路", "content": "最美公路,难以想象", "type": "1", "comment": "23" }]
阅读全文
0 0
- 新闻客户端案例——(AsycHttpClient,SmartImageView,JSON)
- 实验:android案例——新闻客户端(使用开源项目AsyncHttpClient和SmartImageView)
- AsyncHttpClient和SmartImageView的使用及案例(新闻客户端)
- 新闻客户端——SmartImageView——AsyncHttpClient
- 案例—新闻客户端
- Android---SmartImageView和AsyncHttpClient的应用之《新闻客户端》案例
- 案例——新闻客户端
- 案例——新闻客户端
- Android案例—新闻客户端
- 新闻客户端(AsyncHttpClient和SmartImageView的综合使用)
- Android中综合使用AsyncHttpClient和SmartImageView编写新闻客户端的案例
- Android-----AsyncHttpClient和SmartImageView的概述和使用---案例《新闻客户端》
- 使用AsycHttpClient请求Tomcat的新闻客户端的实现
- 新闻客户端————案例
- AsyncHttpClient和SmartImageView的综合使用--新闻客户端
- 新闻客户端(AsyncHttpClient和SmartImageView的综合使用
- AsyncHttpClient和SmartImageView的综合使用--新闻客户端
- 新闻客户端案例开发
- 重装系统后无法使用(win+linux)双系统
- visual studio 2013 控制台输出中文乱码%100帮你解决
- 笔记:App内存优化
- react native常用插件地址
- 数据结构与算法(28)——查找
- 新闻客户端案例——(AsycHttpClient,SmartImageView,JSON)
- 如何实现继承?继承的规则?
- NETCTOSS项目(一)
- git使用方法
- 视频学习Vue-仿APP学习笔记
- LigerUI
- Backtrader量化平台教程(八) TimeFrame
- 科学网博客——力荐,不看会后悔的!
- Java设计模式之模板方法模式