第一周
来源:互联网 发布:入门红酒 知乎 编辑:程序博客网 时间:2024/05/16 09:56
package com.wzq.listviewimagetemp;
import android.graphics.Bitmap;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import com.google.gson.Gson;
import java.util.List;
/**
* listview条目中的文字和图片都是从网络获取的
*/
public class MainActivity extends AppCompatActivity {
* listview条目中的文字和图片都是从网络获取的
*/
public class MainActivity extends AppCompatActivity {
private ListView lv;
String urlTotal = "http://api.expoon.com/AppNews/getNewsList/type/1/p/1";
// List<Student.DataBean> lists = new ArrayList<>();
private MAdapter mAdapter;
private List<Product.DataBean> dataList;
String urlTotal = "http://api.expoon.com/AppNews/getNewsList/type/1/p/1";
// List<Student.DataBean> lists = new ArrayList<>();
private MAdapter mAdapter;
private List<Product.DataBean> dataList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lv = (ListView) findViewById(R.id.lv);
// mAdapter = new MAdapter();
initData();
}
private void initData() {
//用AsyncTask配合httpUrlConnection请求网络
new MAsyncTask().execute(urlTotal);
new MAsyncTask().execute(urlTotal);
}
class MAdapter extends BaseAdapter {
@Override
public int getCount() {
return dataList.size();
}
@Override
public Object getItem(int i) {
return dataList.get(i);
}
public Object getItem(int i) {
return dataList.get(i);
}
@Override
public long getItemId(int i) {
return i;
}
public long getItemId(int i) {
return i;
}
@Override
public View getView(int i, View containerView, ViewGroup viewGroup) {
View view = View.inflate(MainActivity.this, R.layout.list_item, null);
TextView tv_name = (TextView) view.findViewById(R.id.tv_name);
ImageView iv = (ImageView) view.findViewById(R.id.iv);
tv_name.setText(dataList.get(i).getNews_title());
public View getView(int i, View containerView, ViewGroup viewGroup) {
View view = View.inflate(MainActivity.this, R.layout.list_item, null);
TextView tv_name = (TextView) view.findViewById(R.id.tv_name);
ImageView iv = (ImageView) view.findViewById(R.id.iv);
tv_name.setText(dataList.get(i).getNews_title());
/**
* getView方法每个条目显示的时候都会调用,所以我们在这个请求图片,并设置
* 把图片url传递给asyncTask
*/
new MImageAsyncTask(iv).execute(dataList.get(i).getPic_url());
* getView方法每个条目显示的时候都会调用,所以我们在这个请求图片,并设置
* 把图片url传递给asyncTask
*/
new MImageAsyncTask(iv).execute(dataList.get(i).getPic_url());
return view;
}
}
//异步处理任务类; 代替handler,可以方便的更新UI, 底层也是封装的Handler和Thread类;
}
}
//异步处理任务类; 代替handler,可以方便的更新UI, 底层也是封装的Handler和Thread类;
/**
* 1-- 自己写个类继承AsyncTask(一般第一个泛型是传过来的url,第二个是进度数据,第三个是请求网络回来的返回值 )
*/
class MAsyncTask extends AsyncTask<String,Void,String> {
* 1-- 自己写个类继承AsyncTask(一般第一个泛型是传过来的url,第二个是进度数据,第三个是请求网络回来的返回值 )
*/
class MAsyncTask extends AsyncTask<String,Void,String> {
// 这个方法是在子线程请求网络用
//strings 是可变参数,是个数组;
@Override
protected String doInBackground(String... strings) {
String url = strings[0];
//用联网工具类请求数据;
String result = NetWordUtils.getNetjson(url);
//把请求到的json返回出去;返回个了主线程的那个方法(onPostExecute)
return result;
}
//strings 是可变参数,是个数组;
@Override
protected String doInBackground(String... strings) {
String url = strings[0];
//用联网工具类请求数据;
String result = NetWordUtils.getNetjson(url);
//把请求到的json返回出去;返回个了主线程的那个方法(onPostExecute)
return result;
}
//这个方法是存在于主线程,更新UI用;这个方法的参数 就是doInBackground返回的从网络获取到的数据
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
Gson gson = new Gson();
Product product = gson.fromJson(s, Product.class);
dataList = product.getData();
mAdapter = new MAdapter();
lv.setAdapter(mAdapter);
}
}
/**
* 用AsyncTask配合HttpUrlconnection 请求图片
*/
class MImageAsyncTask extends AsyncTask<String, Void,Bitmap>{
private ImageView iv;
public MImageAsyncTask(ImageView iv) {
this.iv= iv;
}
this.iv= iv;
}
@Override
protected Bitmap doInBackground(String... strings) {
String urlString = strings[0];
return NetWordUtils.getNetBitmap(urlString);
}
protected Bitmap doInBackground(String... strings) {
String urlString = strings[0];
return NetWordUtils.getNetBitmap(urlString);
}
//这个方法是主线程,更新图片;
@Override
protected void onPostExecute(Bitmap bitmap) {
super.onPostExecute(bitmap);
iv.setImageBitmap(bitmap);
@Override
protected void onPostExecute(Bitmap bitmap) {
super.onPostExecute(bitmap);
iv.setImageBitmap(bitmap);
}
}
}
}