JSONObjectobject=jsonArray.getJSONObject(i);
String
};
};
@Override
protectedvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lvNews=(ListView)findViewById(R.id.lvNews);
//初始化
newsList=newArrayList();
adapter=newNewsAdapter(this,newsList);
lvNews.setAdapter(adapter);
lvNews.setOnItemClickListener(this);
HttpUtils.getNewsJSON(GET_NEWS_URL,getNewsHandler);
}
@Override
publicbooleanonCreateOptionsMenu(Menumenu){
//Inflatethemenu;thisaddsitemstotheactionbarifitispresent.
getMenuInflater().inflate(R.menu.main,menu);
returntrue;
}
@Override
publicvoidonItemClick(AdapterView
>arg0,Viewarg1,intposition,longarg3){
//TODOAuto-generatedmethodstub
Newsnews=newsList.get(position);
Intentintent=newIntent(this,BrowseNewsActivity.class);
intent.putExtra("content_url",news.getContent_url());
startActivity(intent);
}
}
此处需要一个工具类HttpUtils以及自定义的NewsAdapter以实现item的视图显示.
HttpUtils代码如下:
packagecom.MR.news.utils;
importjava.io.BufferedReader;
importjava.io.InputStream;
importjava.io.InputStreamReader;
import.HttpURLConnection;
import.URL;
importandroid.graphics.Bitmap;
importandroid.graphics.BitmapFactory;
importandroid.os.Handler;
importandroid.os.Message;
importandroid.widget.ImageView;
publicclassHttpUtils{
//工具类直接定义成静态方法即可
/*url用于内部类中,所以要将其设定为final类型*/
/*读取完成需要通知主线程,需要使用handler*/
publicstaticvoidgetNewsJSON(finalStringurl,finalHandlerhandler){
//访问网络,时间长,开启新线程
newThread(newRunnable(){
@Override
publicvoidrun(){
//TODOAuto-generatedmethodstub
HttpURLConnectionconn;
InputStreamis;
try{
conn=(HttpURLConnection)newURL(url).openConnection();
//GET方式获取
conn.setRequestMethod("GET");
//得到输入流
is=conn.getInputStream();
//读取数据用缓冲,里面要传入一个reader
BufferedReaderreader=newBufferedReader(newInputStreamReader(is));
//一行一行读取数据
Stringline="";
//没读完一行进行拼接,高效
StringBuilderresult=newStringBuilder();
while((line=reader.readLine())!
=null){
result.append(line);
}
Messagemsg=newMessage();
//msg.obj可以放进去任何对象
msg.obj=result.toString();
handler.sendMessage(msg);
}catch(Exceptione){
e.printStackTrace();
}
}}).start();
}
publicstaticvoidsetPicBitMap(finalImageViewivPic,finalStringpic_url){
newThread(newRunnable(){
@Override
publicvoidrun(){
//TODOAuto-generatedmethodstub
try{
HttpURLConnectionconn=(HttpURLConnection)newURL(pic_url).openConnection();
conn.connect();
InputStreamis=conn.getInputStream();
//bitmap就是所需图片资源
/*从资源文件中的到图片*/
Bitmapbitmap=BitmapFactory.decodeStream(is);
ivPic.setImageBap(bitmap);
is.close();
}catch(Exceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
}
}).start();
}
}
NewsAdapter代码如下:
packagecom.MR.news.adapter;
importjava.util.List;
importcom.MR.news.R;
importcom.MR.news.model.News;
importcom.MR.news.utils.HttpUtils;
importandroid.content.Context;
importandroid.view.LayoutInflater;
importandroid.view.View;
importandroid.view.ViewGroup;
importandroid.widget.BaseAdapter;
importandroid.widget.ImageView;
importandroid.widget.TextView;
publicclassNewsAdapterextendsBaseAdapter{
//声明上下文对象,后面的getView方法需要
privateContextcontext;
privateListnewsList;
publicNewsAdapter(Contextcontext,ListnewsList){
this.context=context;
this.newsList=newsList;
}
@Override
publicintgetCount(){
//TODOAuto-generatedmethodstub
returnnewsList.size();
}
@Override
publicObjectgetItem(intposition){
//TODOAuto-generatedmethodstub
returnnewsList.get(position);
}
@Override
publiclonggetItemId(intposition){
//TODOAuto-generatedmethodstub
returnposition;
}
@Override
publicViewgetView(intposition,ViewconvertView,ViewGrouparg2){
//TODOAuto-generatedmethodstub
if(convertView==null){
convertView=LayoutInflater.from(context).inflate(R.layout.news_item,null);
}
TextViewtvTitle=(TextView)convertView.findViewById(R.id.tvTitle);
TextViewtvDesc=(TextView)convertView.findViewById(R.id.tvDesc);
TextViewtvTime=(TextView)convertView.findViewById(R.id.tvTime);
ImageViewivPic=(ImageView)convertView.findViewById(R.id.ivPic);
Newsnews=newsList.get(position);
tvTitle.setText(news.getTitle());
tvDesc.setText(news.getDesc());
tvTime.setText(news.getTime());
Stringpic_url=news.getPic_url();
HttpUtils.setPicBitMap(ivPic,pic_url);
returnconvertView;
}
}
news_item用来设置每个item的显示格式
xmlversion="1.0"encoding="utf-8"?
>
android="
android:
layout_width="match_parent"
android:
layout_height="match_parent">
android:
id="@+id/ivPic"
android:
layout_width="42dp"
android:
layout_height="42dp"
android:
src="@drawable/ic_launcher"
/>
android:
id="@+id/tvTitle"
android:
layout_width="wrap_content"
android:
layout_height="wrap_content"
android:
layout_alignParentTop="true"
android:
layout_toRightOf="@+id/ivPic"
android:
text="title"
android:
textSize="18sp"/>
android:
id="@+id/tvDesc"
android:
layout_width="wrap_content"
android:
layout_height="wrap_content"
android:
layout_alignLeft="@+id/tvTitle"
android:
layout_below="@+id/tvTitle"
android:
text="desc"
android:
textSize="18sp"/>
android:
id="@+id/tvTime"
android:
layout_width="wrap_content"
android:
layout_height="wrap_content"
android:
layout_alignParentRight="true"
android:
text="time"
android:
textSize="10sp"
/>
注意:
此item中需要显示单个图片,所以用到Bitmap这个类。
由于用到网络传输,所以需要用到线程这个概念!
!
关键理解handlermessage以及loop这三者的关系。