1."新闻客户端"程序对应的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> 2.ListView的Item布局文件news_items.xml:<?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> 3.MainActivity.java文件中的代码:
package cn.edu.bzu.news; import android.graphics.Color; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.LinearLayout; import android.widget.ListView; import android.widget.TextView; import android.widget.Toast; import com.loopj.android.http.AsyncHttpClient; import com.loopj.android.http.AsyncHttpResponseHandler; import com.loopj.android.image.SmartImageView; import org.apache.http.Header; import java.io.ByteArrayInputStream; import java.util.List; public class MainActivity extends AppCompatActivity { private ListView lv_news; private LinearLayout loading; private List<NewsInfo> newsInfos; private class NewsAdapter extends BaseAdapter{ @Override public int getCount() { return newsInfos.size(); } @Override public Object getItem(int position) { return null; } @Override public long getItemId(int position) { return 0; } @Override public View getView(int position, View convertView, ViewGroup parent) { View view=View.inflate(MainActivity.this,R.layout.news_item,null); SmartImageView siv= (SmartImageView) view.findViewById(R.id.siv_icon); TextView tv_title= (TextView) view.findViewById(R.id.tv_title); TextView tv_description= (TextView) view.findViewById(R.id.tv_description); TextView tv_type= (TextView) view.findViewById(R.id.tv_type); NewsInfo newsInfo=newsInfos.get(position); siv.setImageUrl(newsInfo.getIconPath(),R.drawable.ab,R.drawable.ic_launcher); tv_title.setText(newsInfo.getTitle()); tv_description.setText(newsInfo.getdescroption()); int type =newsInfo.gettype(); switch (type){ case 1: tv_type.setText("评论:"+newsInfo.getComment()); break; case 2: tv_type.setTextColor(Color.RED); tv_type.setText("专题:"); break; case 3: tv_type.setTextColor(Color.BLUE); tv_type.setText("LIVE"); break; } return view; } } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); lv_news= (ListView) findViewById(R.id.lv_news); loading= (LinearLayout) findViewById(R.id.loading); fillData2(); } private void fillData2() { AsyncHttpClient asynHttpClient = new AsyncHttpClient(); asynHttpClient.get(getString(R.string.serverurl), new AsyncHttpResponseHandler() { @Override public void onSuccess(String content) { super.onSuccess(content); byte[] btyes = content.getBytes(); ByteArrayInputStream bais = new ByteArrayInputStream(btyes); newsInfos = NewsInfoService.getNewsInfos(bais); if (newsInfos == null) { Toast.makeText(MainActivity.this, "解析失败", 0).show(); } else { loading.setVisibility(View.INVISIBLE); lv_news.setAdapter(new NewsAdapter()); } } @Override public void onFailure(Throwable error, String content) { super.onFailure(error, content); Toast.makeText(MainActivity.this, "请求失败", 0).show(); } }); } } 4.创建NewsInfo类中的代码:
package cn.edu.bzu.news; import android.widget.TextView; /** * Created by 牵爱看海 on 2017/5/30. */ 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; } public int getdescroption() { this.description = description; return 0; } public int gettype() { this.type=type; return 0; } } 5.创建一个工具类NewsInfoService.java,具体代码如下:
package cn.edu.bzu.news; import android.util.Xml; import org.xmlpull.v1.XmlPullParser; import java.io.InputStream; import java.util.ArrayList; import java.util.List; /** * Created by 牵爱看海 on 2017/5/30. */ public class NewsInfoService { public static List<NewsInfo> getNewsInfos(InputStream is) { XmlPullParser parser = Xml.newPullParser(); try { parser.setInput(is,"utf-8"); int type =parser.getEventType(); List<NewsInfo> newsInfos=null; NewsInfo newsInfo=null; while (type!=XmlPullParser.END_DOCUMENT){ switch (type){ case XmlPullParser.START_TAG: if("news".equals(parser.getName())){ newsInfo= new NewsInfo(); }else if("newsInfo".equals(parser.getName())){ newsInfo=new NewsInfo(); }else if("icon".equals(parser.getName())){ String icon=parser.nextText(); newsInfo.setIconPath(icon); }else if("title".equals(parser.getName())){ String title=parser.nextText(); newsInfo.setTitle(title); }else if("content".equals(parser.getName())){ String decription=parser.nextText(); newsInfo.setDescription(decription); }else if("type".equals(parser.getName())){ String newstype=parser.nextText(); newsInfo.setType(Integer.parseInt(newstype)); }else if("comment".equals(parser.getName())){ String comment = parser.nextText(); newsInfo.setComment(Long.parseLong(comment)); } break; case XmlPullParser.END_TAG: if ("newsInfo".equals(parser.getName())){ newsInfos.add(newsInfo); newsInfo=null; } break; } type=parser.next(); } return newsInfos; } catch (Exception e) { e.printStackTrace(); } return null; } } 6.在tomcat的安装目录打开webapps文件夹,将NewsInfo.xml文件放置在ROOT文件夹下,代码如下:
<?xml version="1.0" encoding="utf-8"?> <news> <newsInfo> <icon>http://172.16.25.13:8080/img/a.jpg</icon> <title>科技温暖世界</title> <content>进入一个更有爱的领域</content> <type>1</type> </newsInfo> <newsInfo> <icon>http://172.16.25.13:8080/img/a.jpg</icon> <title>《神武》</title> <content>新美术资源盘点,视觉新体验</content> <type>2</type> <comment>35</comment> </newsInfo> <newsInfo> <icon>http://172.16.25.13:8080/img/a.jpg</icon> <title>南北车正式公布合并</title> <content>南北车将于今日正式公布合并</content> <type>3</type> <comment>2</comment> </newsInfo> <newsInfo> <icon>http://172.16.25.13:8080/img/a.jpg</icon> <title>北京拟推医生电子注册</title> <content>突破多点执业“限制”</content> <type>1</type> <comment>25</comment> </newsInfo> <newsInfo> <icon>http://172.16.25.13:8080/img/a.jpg</icon> <title>风力发电进校园</title> <content>风力发电普进校园</content> <type>2</type> <comment>26</comment> </newsInfo> <newsInfo> <icon>http://172.16.25.13:8080/img/a.jpg</icon> <title>地球一小时</title> <content>地球熄灯一小时</content> <type>1</type> <comment>23</comment> </newsInfo> </news>