首先定义两个UI界面activity_main.xml和子界面news_item.xml
在MianActivity类中获取服务器类文件解析到ListView控件上显示代码如下
package cn.itcast.news; import java.io.ByteArrayInputStream; import java.util.List; import android.app.Activity; import android.graphics.Color; import android.os.Bundle; import android.util.Log; 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 cn.itcast.news.bean.NewsInfo; import cn.itcast.news.utils.NewsInfoService; import com.example.flying_universe.news.R; import com.loopj.android.http.AsyncHttpClient; import com.loopj.android.http.AsyncHttpResponseHandler; import com.loopj.android.image.SmartImageView; public class MainActivity extends Activity { private ListView lv_news; private LinearLayout loading; private List<NewsInfo> newsInfos; private class NewsAdapter extends BaseAdapter { public int getCount() { return newsInfos.size(); } 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.ic_launcher, R.drawable.ic_launcher); tv_title.setText(newsInfo.getTitle()); tv_description.setText(newsInfo.getDescription()); 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; } public Object getItem(int position) { return null; } public long getItemId(int position) { return 0; } } 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 asyncHttpClient = new AsyncHttpClient(); asyncHttpClient.get(MainActivity.this.getString(R.string.serverurl), new AsyncHttpResponseHandler() { public void onSuccess(String content) { super.onSuccess(content); byte[] bytes = content.getBytes(); ByteArrayInputStream bais = new ByteArrayInputStream( bytes); newsInfos = NewsInfoService.getNewsInfos(bais); if (newsInfos == null) { Toast.makeText(MainActivity.this, " ", Toast.LENGTH_LONG).show(); } else { loading.setVisibility(View.INVISIBLE); lv_news.setAdapter(new NewsAdapter()); } } public void onFailure(Throwable error, String content) { super.onFailure(error, content); Log.e("error",MainActivity.this.getString(R.string.serverurl)); Log.e("error", error.toString()); Toast.makeText(MainActivity.this, " ", Toast.LENGTH_LONG).show(); } }); } } 创建一个构造方法:对象有
解析xml
package cn.itcast.news.utils; import java.io.InputStream; import java.util.ArrayList; import java.util.List; import org.xmlpull.v1.XmlPullParser; import android.util.Xml; import cn.itcast.news.bean.NewsInfo; 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())) { newsInfos = new ArrayList<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 description = parser.nextText(); newsInfo.setDescription(description); } 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; } } }配置服务器
<?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> <comment>69</comment> </newsInfo> <newsInfo> <icon>http://172.16.25.13:8080/img/b.jpg</icon> <title>《神武》</title> <content>新美术资源盘点 视觉新体验</content> <type>2</type> <comment>35</comment> </newsInfo> <newsInfo> <icon>http://172.16.25.13:8080/img/c.jpg</icon> <title>南北车正式公布合并</title> <content>南北车将于今日正式公布合并</content> <type>3</type> <comment>2</comment> </newsInfo> <newsInfo> <icon>http://172.16.25.13:8080/img/d.jpg</icon> <title>北京拟推医生电子注册</title> <content>突破多点执业"限制"</content> <type>1</type> <comment>25</comment> </newsInfo> <newsInfo> <icon>http://172.16.25.13:8080/img/e.jpg</icon> <title>风力发电进校园</title> <content>风力发电普进校园</content> <type>2</type> <comment>26</comment> </newsInfo> <newsInfo> <icon>http://172.16.25.13:8080/img/f.jpg</icon> <title>地球一小时</title> <content>地球熄灯一小时</content> <type>1</type> <comment>23</comment> </newsInfo> </news>