国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統(tǒng) > Android > 正文

Android模擬實(shí)現(xiàn)網(wǎng)易新聞客戶端

2019-10-23 18:28:09
字體:
供稿:網(wǎng)友

首先我們先看一下要模擬的界面

Android網(wǎng)易新聞客戶端,Android新聞客戶端,Android網(wǎng)易客戶端

我們主要實(shí)現(xiàn)的就是ListView解析json文件中的數(shù)據(jù),UI布局很簡(jiǎn)單不做贅述。
這里我們需要一個(gè)服務(wù)器來實(shí)現(xiàn)數(shù)據(jù)的動(dòng)態(tài)更新, 這里我們用到的是Tomcat8.0。
首先我們把需要解析的json文件放置到Tomcat的webapp文件下的ROOT里面,方便我們解析。

首先我們創(chuàng)建一個(gè)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<NewsInfo> getNewInfo(String json){  Gson gson=new Gson();  Type listType=new TypeToken<List<NewsInfo>>(){  }.getType();  List<NewsInfo> newsInfos=gson.fromJson(json,listType);  return newsInfos; }}

創(chuàng)建json文件的實(shí)體類:

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; }}

activity_main.xml:

<?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>

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="我是標(biāo)題"  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="評(píng)論"  android:textColor="#99000000"  android:textSize="12sp" /></RelativeLayout>

適配器代碼:

 

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<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 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("評(píng)論:"+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實(shí)現(xiàn)代碼:

 

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<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() {  //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() {   @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,"請(qǐng)求失敗",Toast.LENGTH_SHORT).show();   }  }); }}

在values文件加下的String.xml文件中添加:

<string name="serverurl">http://172.16.26.58:8080/newInfo.xml</string>

最后一定不要忘了添加網(wǎng)絡(luò)訪問權(quán)限, 這很重要, 好多同學(xué)都犯了這個(gè)錯(cuò)誤、

這樣基本功能就實(shí)現(xiàn)了。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持VEVB武林網(wǎng)。


注:相關(guān)教程知識(shí)閱讀請(qǐng)移步到Android開發(fā)頻道。
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 肇东市| 北京市| 和林格尔县| 江安县| 腾冲县| 纳雍县| 铁岭市| 大丰市| 乃东县| 武山县| 余江县| 克东县| 桦甸市| 元朗区| 息烽县| 东明县| 南皮县| 铅山县| 隆德县| 古田县| 华蓥市| 永善县| 和硕县| 苍南县| 东平县| 武宣县| 全州县| 衡东县| 十堰市| 永州市| 郑州市| 千阳县| 罗平县| 合阳县| 澳门| 武义县| 本溪市| 沅江市| 鸡西市| 永兴县| 广丰县|