MainActivity.java
public class MainActivity extends Activity{
private ListView mListView;
private static String URL="http://www.imooc.com/api/teacher?type=4&num=30";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mListView=(ListView)findViewById(R.id.lv_main);
new NewAsyncTask().execute(URL);
}
class NewAsyncTask extends AsyncTask<String,Void,List<NewsBean>>{
@Override
protected List<NewsBean> doInBackground(String... params) {
return getJsonData(params[0]);
}
@Override
protected void onPostExecute(List<NewsBean> newsBeans) {
super.onPostExecute(newsBeans);
NewsAdapter adapter=new NewsAdapter(MainActivity.this,newsBeans);
mListView.setAdapter(adapter);
}
}
private List<NewsBean> getJsonData(String param) {
List<NewsBean> newsBeanList=new ArrayList<>();
try {
String jsonString=readStream(new URL(param).openStream());
JSONObject jsonObject;
NewsBean newsBean;
jsonObject=new JSONObject(jsonString);
JSONArray jsonArray=jsonObject.getJSONArray("data");
for(int i=0;i<jsonArray.length();i++){
jsonObject=jsonArray.getJSONObject(i);
newsBean=new NewsBean();
newsBean.newsIconUrl=jsonObject.getString("picSmall");
newsBean.newsTitle=jsonObject.getString("name");
newsBean.newsContent=jsonObject.getString("description");
newsBeanList.add(newsBean);
}
} catch (IOException e) {
e.printStackTrace();
} catch (JSONException e) {
e.printStackTrace();
}
return newsBeanList;
}
private String readStream(InputStream is){//字节流
InputStreamReader isr;
String result="";
try {
String line="";
isr=new InputStreamReader(is,"utf-8");//将字节流转化为字符流
BufferedReader br=new BufferedReader(isr);//封装buffer
while((line=br.readLine())!=null){
result+=line;
}
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return result;
}
}
NewsAdapter.java
public class NewsAdapter extends BaseAdapter {
private List<NewsBean> mList;
private LayoutInflater mInflater;
public NewsAdapter(Context context,List<NewsBean> data) {
mList = data;
mInflater=LayoutInflater.from(context);
}
@Override
public int getCount() {
return mList.size();
}
@Override
public Object getItem(int position) {
return mList.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder=null;
if(convertView==null){
viewHolder=new ViewHolder();
convertView=mInflater.inflate(R.layout.main1,null);
viewHolder.ivIcon=(ImageView)convertView.findViewById(R.id.iv_icon);
viewHolder.tvTitle=(TextView)convertView.findViewById(R.id.tv_title);
viewHolder.tvContent=(TextView)convertView.findViewById(R.id.tv_content);
convertView.setTag(viewHolder);
}else{
viewHolder=(ViewHolder)convertView.getTag();
}
viewHolder.ivIcon.setImageResource(R.mipmap.ic_launcher);
String url=mList.get(position).newsIconUrl;
viewHolder.ivIcon.setTag(url);
new ImageLoader().showImageByThread(viewHolder.ivIcon,url);
viewHolder.tvTitle.setText(mList.get(position).newsTitle);
viewHolder.tvContent.setText(mList.get(position).newsContent);
return convertView;
}
class ViewHolder{
public TextView tvTitle,tvContent;
public ImageView ivIcon;
}
}
ImageLoader.java
public class ImageLoader {
private ImageView mimageView;
private String murl;
private Handler mhandler=new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
if(mimageView.getTag().equals(murl))
mimageView.setImageBitmap((Bitmap)msg.obj);
}
};
public void showImageByThread(ImageView imageView, final String url){
mimageView=imageView;
murl=url;
new Thread(){
@Override
public void run() {
super.run();
Bitmap bitmap=getBitmapFromURL(url);
Message message=Message.obtain();
message.obj=bitmap;
mhandler.sendMessage(message);
}
}.start();
}
public Bitmap getBitmapFromURL(String urlString){
Bitmap bitmap;
InputStream is = null;
try {
URL url=new URL(urlString);
HttpURLConnection connection=(HttpURLConnection)url.openConnection();
is=new BufferedInputStream(connection.getInputStream());
bitmap= BitmapFactory.decodeStream(is);
connection.disconnect();
return bitmap;
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return null;
}
}
NewsBean.java
public class NewsBean {
public String newsIconUrl;
public String newsTitle;
public String newsContent;
}
main1.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<ImageView
android:id="@+id/iv_icon"
android:layout_width="94dp"
android:layout_height="94dp"
android:src="@mipmap/ic_launcher"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:paddingLeft="4dp"
android:orientation="vertical">
<TextView
android:id="@+id/tv_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:textSize="15sp"
android:maxLines="1"
android:text="title"/>
<TextView
android:id="@+id/tv_content"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="10sp"
android:maxLines="3"
android:text="content"/>
</LinearLayout>
</LinearLayout>
main.xml
<RelativeLayout
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"
android:gravity="center_horizontal"
android:orientation="vertical"
android:paddingLeft="10dp"
android:paddingRight="10dp">
<ListView
android:id="@+id/lv_main"
android:layout_width="match_parent"
android:layout_height="match_parent">
</ListView>
</RelativeLayout>