Android之模拟网易新闻客户端

本实验主要是ListView解析json文件中的数据,需要Tomcat8.0来实现数据的动态更新。 首先把需要解析的json文件放置到Tomcat的webapp文件下的ROOT里面。

  1. 首先创建一个JsonParse类用来解析json文件:
package cn.edu.bzu.myapplication.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.myapplication.entity.NewsInfo;/*** Created by Becauseshy on 2017/5/18.*/public class JsonParse {public static List getNewInfo(String json){Gson gson=new Gson();Type listType=new TypeToken>(){}.getType();List newsInfos=gson.fromJson(json,listType);return newsInfos;}
}

2.创建json文件的实体类:

package cn.edu.bzu.myapplication.entity;/*** Created by Becauseshy on 2017/5/17.*/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;}
}
3.页面布局





4. item的布局文件


5. 适配器代码

package cn.edu.bzu.myapplication.adapter;/*** Created by Becauseshy on 2017/5/17.*/
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.myapplication.R;
import cn.edu.bzu.myapplication.entity.NewsInfo;public class NewAdapter extends ArrayAdapter{
private  int resourceID;public NewAdapter(Context context, int resource, List objects) {super(context, resource, objects);resourceID=resource;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {NewsInfo fruit=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;}
}
6. MainActivity

package cn.edu.bzu.myapplication;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.myapplication.Tools.JsonParse;
import cn.edu.bzu.myapplication.adapter.NewAdapter;
import cn.edu.bzu.myapplication.entity.NewsInfo;
import cn.edu.bzu.myapplication.model.Fruit;public class MainActivity extends AppCompatActivity {private ListView Iv_news;private NewAdapter newAdapter;private List newInfos;private LinearLayout loading;private JsonParse jsonParse;@Overrideprotected 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() {//fruitList=new ArrayList<>();//Fruit apple=new Fruit("Apple",R.drawable.apple_pic);// fruitList.add(apple);AsyncHttpClient asyncHttpClient=new AsyncHttpClient();asyncHttpClient.get(getString(R.string.serverurl), new AsyncHttpResponseHandler() {@Overridepublic 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();}}@Overridepublic void onFailure(int i, cz.msebera.android.httpclient.Header[] headers, byte[] bytes, Throwable throwable) {Toast.makeText(MainActivity.this,"请求失败",Toast.LENGTH_SHORT).show();}});}}
7. 在values文件加下的String.xml文件中添加

http://172.16.26.58:8080/newInfo.xml

本实验的仿照界面:



本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部