HTTPUrlConetion+AsyncTask的简单使用

import android.annotation.SuppressLint;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.ListView;
import com.google.gson.Gson;
import java.util.List;
import zhao.com.adapter.MAdapter1;
import zhao.com.bean.DataBean;
import zhao.com.bean.Student;
import zhao.com.demo01.DataUrl;
import zhao.com.demo01.R;

public class FRag_02 extends Fragment {

//接口地址
String urlString = "http://api.expoon.com/AppNews/getNewsList/type/1/p/1";

Button button;
ListView listView;
List<DataBean> list;
MAdapter mAdapter;

@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    View mView = inflater.inflate(R.layout.frag_02, container, false);

    button = mView.findViewById(R.id.button1);
    listView = mView.findViewById(R.id.listView1);
	
	//按钮点击事件
    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
        	//这行代码要在主线程调用;,execute里面的参数是接口地址;
            new MyAsyncTack().execute(urlString);
        }
    });

    return mView;
}
//自定义内部类
 class MyAsyncTack extends AsyncTask<String,Void ,String> {

	//相当于子线程
   @Override
   protected String doInBackground(String... strings) {    //String... strings:可变数组
		//DataUrl.getjson:自定义的类和方法
       return DataUrl.getjson(strings[0]);  //只传入一个值所以下标是0
   }

	//相当于主线程
   @Override
   protected void onPostExecute(String s) {
       super.onPostExecute(s);
       
		//Gson解析
       Gson gson = new Gson();
       Student student = gson.fromJson(s, Student.class);
       list = student.getData();
       mAdapter = new MAdapter(getActivity(), list);

       listView.setAdapter(mAdapter);
		
		//刷新数据
       mAdapter.notifyDataSetChanged();
   }

}

}

//适配器
import android.content.Context;
import android.graphics.Bitmap;
import android.os.AsyncTask;
import android.support.v4.app.FragmentActivity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

import java.util.List;

import zhao.com.bean.DataBean;
import zhao.com.demo01.DataUrl;
import zhao.com.demo01.R;

public class MAdapter extends BaseAdapter {
Context context;
List list=null;
Bitmap bitmap;
public MAdapter(Context context, Listlist) {
this.context = context;
this.list = list;
}

@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) {
    ViewHolder1 holder = null;

    if (convertView == null) {
        holder = new ViewHolder1();
        convertView = View.inflate(context, R.layout.lv_json_item, null);
        holder.textView2 = convertView.findViewById(R.id.textView_json);
        holder.imageView1= convertView.findViewById(R.id.image_tu);
        convertView.setTag(holder);

    } else holder = (ViewHolder1) convertView.getTag();

    holder.textView2.setText(list.get(position).getNews_title());
    
//再次发送从json数组中获取的的图片地址
    new MBitmpAsyncTack(holder.imageView1).execute(list.get(position).getPic_url());
    return convertView;
}
}
	class ViewHolder1 {

TextView textView2;
ImageView imageView1;
}
class MBitmpAsyncTack extends AsyncTask<String,Void,Bitmap> {

ImageView iv;

public MBitmpAsyncTack(ImageView iv) {
    this.iv = iv;
}

@Override
protected Bitmap doInBackground(String... strings) {
//返回获取的bitmap
    return DataUrl.getImsge(strings[0]);
}

@Override
protected void onPostExecute(Bitmap bitmap) {
    super.onPostExecute(bitmap);
//在这更改图片
   	 iv.setImageBitmap(bitmap);
  }
}

//自定义的类用来发送HTTPUrlConnetion
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.util.Log;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;

public class DataUrl {

public static String getjson(String urlString) {

    try {
        URL url = new URL(urlString);
        HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();

        int responseCode = urlConnection.getResponseCode();

        if (responseCode == 200) {
            InputStream inputStream = urlConnection.getInputStream();
            BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
            //可拼接的字符串
            StringBuilder stringBuilder = new StringBuilder();
            String temp = "";
            while ((temp = bufferedReader.readLine()) != null) {
                stringBuilder.append(temp);

            }
            String jsonString = stringBuilder.toString();
            return jsonString;
        }else {
            Log.e("zmz","请求失败,请求码:"+responseCode);
        }

    } catch (MalformedURLException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
    return "";
}

//(HttpURLConnection获取图片
public static Bitmap getImsge(String pic_url) {
    try {
        URL url = new URL(pic_url);
        HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();

        int responseCode = urlConnection.getResponseCode();

        if (responseCode == 200) {
            InputStream inputStream = urlConnection.getInputStream();
            //BitmapFactory:  android提供好的加工图片的工具类,
            Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
            return bitmap;
        } else {
            Log.e("zmz","请求失败,请求码:"+responseCode);
        }
    } catch (MalformedURLException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
    return null;
}

}

猜你喜欢

转载自blog.csdn.net/qq_43567217/article/details/83583171