Httpurlconnection+ListView列表展示

package com.qy.day02;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.ListView;
import android.widget.Toast;

import com.google.gson.Gson;
import com.qy.day02.adapter.MyAdapter;
import com.qy.day02.bean.JsonBean;
import com.qy.day02.http.MyAsyncTask;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity implements View.OnClickListener, MyAsyncTask.CallBackS {

    private ListView listView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //找控件设置值监听
        findViewById(R.id.button2).setOnClickListener(this);
        listView = findViewById(R.id.listView);
    }

    @Override
    public void getData(String str) {
        //实现接口MyAsyncTask.CallBackS ,得到getData方法
        //得到接口回调返回的数
        //解析
        Gson gson = new Gson();
        JsonBean jsonBean = gson.fromJson(str, JsonBean.class);
        //获取集合
        ArrayList<JsonBean.DataBean> data = jsonBean.getData();
        //设置适配器
        listView.setAdapter(new MyAdapter(data, MainActivity.this));

    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            //点击事件
            case R.id.button2:
                //创建MyAsyncTask类

                //创建MyAsyncTask对象
                MyAsyncTask task = new MyAsyncTask();
                //第九部:6 注册接口
                task.setmCallbackS(MainActivity.this);
                //请求数据(参数 : 接口 )
                task.execute("http://api.expoon.com/AppNews/getNewsList/type/1/p/1");
                //这个时候开始请求数据,数据请求完成后会返回返回到接口回调的方法中
                break;
        }
    }


}

AsyncTask类如下:

package com.qy.day02.http;

import android.os.AsyncTask;

import javax.security.auth.callback.Callback;

//第一个 代表你要给子线程传的东西
//第二个 代表任务执行的进度  用Integer
//第三个 代表解析完成后子线程返回的值,以及主线程接受的值
//第四:继承AsyncTask,然后写三个泛型,< String,Integer,String>
public class MyAsyncTask  extends AsyncTask< String,Integer,String> {


    @Override
    protected String doInBackground(String... strings) {
        //代表子线程
        //利用子线程请求数据
        return Http.requestHttpGet(strings[0]);
    }

    @Override
    protected void onPostExecute(String s) {
        super.onPostExecute(s);
        //主线程
        mCallbackS.getData(s);
    }
    //创建接口
    public interface  CallBackS{
        //抽象方法
        void getData(String str);
    }
    //写个属性
    private CallBackS mCallbackS;
    //写一个set方法
    public void setmCallbackS(CallBackS mCallbackS) {
        this.mCallbackS = mCallbackS;
    }
}

http类如下:

package com.qy.day02.http;


import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;

public class Http {
   public static String requestHttpGet(String strUrl) {

        try { //设置url
            URL url = new URL(strUrl);

            //获取HttpURLConnection
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            //设置为get请求
            connection.setRequestMethod("GET");
            //设置连接主机超时时间
            connection.setConnectTimeout(5000);
            //设置从主机读取数据超时
            connection.setReadTimeout(5000);
            //获取请求码
            int code = connection.getResponseCode();
            
            //判断请求是否成功
            if (code == HttpURLConnection.HTTP_OK) {
                //如果数据请求成功
                //就获取数据
                InputStream stream = connection.getInputStream();
                BufferedReader reader = new BufferedReader(new InputStreamReader(stream, "utf-8"));
                //拼接字符串
                StringBuilder builder = new StringBuilder();
                //把数据读取从成字符串
                String str = "";
                while ((str = reader.readLine()) != null) {
                    //把一行行数据拼接成一行数据
                    builder.append(str);
                }
                //返回拼接后的数据
                return builder.toString();

            }
            //关闭连接
            connection.disconnect();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

}

Bean类如下:

package com.qy.day02.bean;

import java.util.ArrayList;
import java.util.List;

public class JsonBean {


    private int status;
    private String info;
    private ArrayList<DataBean> data;

    public int getStatus() {
        return status;
    }

    public void setStatus(int status) {
        this.status = status;
    }

    public String getInfo() {
        return info;
    }

    public void setInfo(String info) {
        this.info = info;
    }

    public ArrayList<DataBean> getData() {
        return data;
    }

    public void setData(ArrayList<DataBean> data) {
        this.data = data;
    }

    public static class DataBean {


        private String news_id;
        private String news_title;
        private String news_summary;
        private String pic_url;

        public String getNews_id() {
            return news_id;
        }

        public void setNews_id(String news_id) {
            this.news_id = news_id;
        }

        public String getNews_title() {
            return news_title;
        }

        public void setNews_title(String news_title) {
            this.news_title = news_title;
        }

        public String getNews_summary() {
            return news_summary;
        }

        public void setNews_summary(String news_summary) {
            this.news_summary = news_summary;
        }

        public String getPic_url() {
            return pic_url;
        }

        public void setPic_url(String pic_url) {
            this.pic_url = pic_url;
        }
    }
}

App类如下:

package com.qy.day02.app;

import android.app.Application;
import android.graphics.Bitmap;

import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
import com.nostra13.universalimageloader.core.display.SimpleBitmapDisplayer;
import com.qy.day02.R;
public class App extends Application {
    //注册 Application
    @Override
    public void onCreate() {
        super.onCreate();
        //设置框架的一些属性,然后初始化  ImageLoader
        DisplayImageOptions options = new DisplayImageOptions.Builder()
                // 正在加载时显示的占位图
                .showImageOnLoading(R.mipmap.zhan)
//                // URL为空时显示的占位图
//                .showImageForEmptyUri(R.mipmap.zhaobudao)
                // 加载失败时显示的占位图
                .showImageOnFail(R.mipmap.shibai)

//                //可在实现中对 bitmap 做一些额外处理,比如加圆角、动画效果。
//                .displayer(new SimpleBitmapDisplayer())
                // bitmap的质量,默认为ARGB_8888
                .bitmapConfig(Bitmap.Config.ARGB_8888)
                .build();
        //构建
        ImageLoaderConfiguration loaderConfiguration = new ImageLoaderConfiguration.Builder(this)
                //把我们写的设置添加到构建中
                .defaultDisplayImageOptions(options)
                //构建
                .build();

        //获得实例
        ImageLoader imageLoader = ImageLoader.getInstance();

        //初始化
        imageLoader.init(loaderConfiguration);

    }
}

Adapter适配器如下:

package com.qy.day02.adapter;

import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.qy.day02.R;
import com.qy.day02.bean.JsonBean;

import java.util.ArrayList;

public class MyAdapter extends BaseAdapter {

    private ArrayList<JsonBean.DataBean> list;
    private Context context;

    public MyAdapter(ArrayList<JsonBean.DataBean> list, Context context) {
        this.list = list;
        this.context = context;

    }

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

    @Override
    public Object getItem(int position) {
        return null;
    }

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

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        convertView = View.inflate(context, R.layout.item, null);
        ImageView imageView = convertView.findViewById(R.id.imageView);
        TextView textView = convertView.findViewById(R.id.textView);

        JsonBean.DataBean datas = list.get(position);
        textView.setText(datas.getNews_title());
        // 请求图片
        //请求图片需要在Application中注册
        ///在你自己的项目中 build.gradle(   : 你项目的名字)
        // implementation 'com.nostra13.universalimageloader:universal-image-loader:1.9.5'
        //然后新建一个App的类

        String uri = datas.getPic_url();
        ImageLoader.getInstance().displayImage(uri, imageView);
        //注意 网络权限
        return convertView;
    }
}

点击button显示Listview
效果图如下:
在这里插入图片描述

如果有报错请查看网络

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值