asyncTask和httpurlconnection请求网络展示

本文介绍了一个基于Android平台的新闻列表加载及图片异步处理的实现方案。通过自定义Adapter和AsyncTask,从指定API获取新闻数据,并使用Gson进行JSON解析,将数据填充至ListView。同时,通过BitmapAsyncTask实现图片的异步加载。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package lll.com.as_httplx;

MainActivity页面
public class MainActivity extends AppCompatActivity {

String urlString = "http://api.expoon.com/AppNews/getNewsList/type/1/p/1";
String urlBitmap = "https://img-my.youkuaiyun.com/uploads/201407/26/1406383265_8550.jpg";
String tag = "lv";
ArrayList<Product.DataBean> list = new ArrayList<Product.DataBean>();
private View listView;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    //找控件
    listView = findViewById(R.id.list);

    //异步
    new MAsyncTask().execute(urlString);
}

private class MAsyncTask extends AsyncTask<String,Void,List<Product.DataBean>> {
    @Override
    protected List<Product.DataBean> doInBackground(String... strings) {
        List<Product.DataBean> jsonString = Net.getJson(strings[0]);
        return jsonString;
    }

    @Override
    protected void onPostExecute(List<Product.DataBean> dataBeans) {
        super.onPostExecute(dataBeans);
        //把一个集合中的数据存到另一个集合中
        list.addAll(dataBeans);
    }
}
public class MyAdapter extends BaseAdapter{

    @Override
    public int getCount() {
        return list.size();
    }

    @Override
    public Object getItem(int position) {
        return list.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder vh = new ViewHolder();
        if (convertView == null){
            convertView = View.inflate(MainActivity.this,R.layout.item,null);
            vh.tv = convertView.findViewById(R.id.tv);
            convertView.setTag(vh);
        }else {
            vh = (ViewHolder) convertView.getTag();
        }
        //绑定数据
        Product.DataBean dataBean = list.get(position);
        vh.tv.setText(dataBean.getNews_summary());
        ImageView iv = convertView.findViewById(R.id.iv);
        //异步
        new BitmapAsyncTask(iv).execute(urlBitmap);
        return convertView;
    }
}
class ViewHolder{
    public TextView tv;
}

private class BitmapAsyncTask extends AsyncTask<String,Void,Bitmap>{
    ImageView iv;
    public BitmapAsyncTask(ImageView iv) {
        this.iv = iv;
    }

    @Override
    protected Bitmap doInBackground(String... strings) {
        Bitmap bitmap = Net.getBitmap(strings[0]);
        return bitmap;
    }

    @Override
    protected void onPostExecute(Bitmap bitmap) {
        super.onPostExecute(bitmap);
        iv.setImageBitmap(bitmap);
    }
}

}
Net页面

class Net {
public static List<Product.DataBean> getJson(String string) {
try {
URL url = new URL(string);
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
//获取请求状态码
int responseCode = urlConnection.getResponseCode();
if (responseCode == 200){
//获取数据流
InputStream inputStream = urlConnection.getInputStream();
//缓冲流
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
String temp = “”;
//拼接字符串
StringBuilder stringBuilder = new StringBuilder();
//按行读取
while ((temp = bufferedReader.readLine())!=null){
stringBuilder.append(temp);
}
//开始解析
Gson gson = new Gson();
Product json = gson.fromJson(String.valueOf(stringBuilder), Product.class);
List<Product.DataBean> data = json.getData();
return data;
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}

public static Bitmap getBitmap(String string) {
    try {
        URL url = new URL(string);
        HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
        //获取请求状态码
        int responseCode = urlConnection.getResponseCode();
        if (responseCode == 200){
            //获取文件流
            InputStream inputStream = urlConnection.getInputStream();
            Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
            return bitmap;
        }
    } catch (MalformedURLException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
    return null;
}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值