Gson解析,ImageOnLoading框架,构建AsyncTask,ListView展示

1: 首先创建Http

public class Http {

    public static String requetHttpget(String s){

        try {
            URL url = new URL(s);

            HttpURLConnection connection = (HttpURLConnection) url.openConnection();

            //get请求
            connection.setRequestMethod("GET");

            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();
        }

        catch (Exception e) {
            e.printStackTrace();
        }

        return null;
    }
    }

2:然后是ImageOnLoading

public class imag extends Application {

    @Override
    public void onCreate() {
        super.onCreate();
        //设置框架的属性
        DisplayImageOptions options = new DisplayImageOptions.Builder()
                .showImageOnLoading(R.mipmap.ic_launcher).build();

        //构建
        ImageLoaderConfiguration loaderConfiguration = new ImageLoaderConfiguration
                .Builder(this).build();
        //获得实例
        ImageLoader imageLoader = ImageLoader.getInstance();
        //初始化
        imageLoader.init(loaderConfiguration);
    }
}

3:构建AsyncTask子类的泛型参数,构建AsyncTask子类的回调方法

构建AsyncTask子类的泛型参数:
AsyncTask<Params,Progress,Result>是一个抽象类,通常用于被继承.继 承AsyncTask需要指定如下三个泛型参数: Params:启动任务时输入的参数类型. Progress:后台任务执行中返回进度值的类型. Result:后台任务执行完成后返回结果的类型.*

构建AsyncTask子类的回调方法:
AsyncTask主要有如下几个方法:
doInBackground:必须重写,异步执行后台线程要完成的任务,耗时操作将在 此方法中完成.
onPreExecute:执行后台耗时操作前被调用,通常用于进行初始化操作.
onPostExecute:当doInBackground方法完成后,系统将自动调用此方法,并 将doInBackground方法返回的值传入此方法.通过此方法进行UI的更新.
onProgressUpdate:当在doInBackground方法中调用publishProgress方法更新任务执行进度后,将调用此方法.通过此方法我们可以知晓任务的完成进 度.

**java中交互方式分为两种同步和异步两种,异同情况:

同步交互:指发送一个请求,需要等待返回,然后才能够发送下一个 请求,有个等待过程;
异步交互:指发送一个请求,不需要等待返回,随时可以发送下一个请求。
区别:同步需要等待,异步不需要等待;在项目开发过程中优先选择不需要等待的异步交互。**

public class MyAsyncTask extends AsyncTask<String,Integer,String> {

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

    //主线程
    @Override
    protected void onPostExecute(String s) {
        super.onPostExecute(s);
        //调用
        callBack.getData(s);
    }

    //接口
    public  interface CallBack{
        //接口内的抽象方法
        void getData(String str);
    }

    //属性
    private CallBack callBack;

    //set方法
    public void setCallBack(CallBack callBack) {
        this.callBack = callBack;
    }
}

4:下一步MainActivity里,Gson解析, 创建对象,注册接口,请求数据

 @Override
    public void onClick(View v) {
           switch (v.getId()){
               case R.id.button:

                   //创建对象
                   MyAsyncTask task = new MyAsyncTask();

                   //注册接口
                   task.setCallBack(MainActivity.this);

                   //请求数据
                   task.execute("http://api.expoon.com/AppNews/getNewsList/type/1/p/1");

                   break;
           }
    }

记得:implements MyAsyncTask.CallBack(AsyncTask里的interface接口)

 @Override
    public void getData(String str) {

        Gson gson = new Gson();

        JsonBean jsonBean = gson.fromJson(str, JsonBean.class);
        Toast.makeText(MainActivity.this,""+jsonBean.toString(),Toast.LENGTH_LONG).show();
        //获取集合
         ArrayList<JsonBean.DataBean> data = jsonBean.getData();


        //设置listView适配器
        ListAdapter listAdapter = new ListAdter(data,MainActivity.this);
        list.setAdapter(listAdapter);

    }

5:ListView用于展示解析的数据,外部类

一部分没有优化的重要片段

 convertView = View.inflate(context, R.layout.item,null);

        ImageView imageView = convertView.findViewById(R.id.imag);
        TextView textView = convertView.findViewById(R.id.name);

        JsonBean.DataBean dataBean = data.get(position);

        textView.setText(dataBean.getNews_title());
        String pic_url = dataBean.getPic_url();

        ImageLoader.getInstance().displayImage(pic_url,imageView);

        return convertView;

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值