代码演示
JAVA
package com.bawei.zhangjinfeng20171105.frag;
import android.graphics.Bitmap;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
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.widget.Toast;
import com.bawei.zhangjinfeng20171105.R;
import com.bawei.zhangjinfeng20171105.bean.Bean;
import com.bawei.zhangjinfeng20171105.util.Netstateutil;
import com.bawei.zhangjinfeng20171105.util.Netutil;
import com.google.gson.Gson;
import java.util.ArrayList;
import java.util.List;
/**
* Created by sky on 2017/11/05.
*/
public class One extends Fragment {
private ListView lv;
private Myadaper m;
List<Bean.NewslistBean> list=new ArrayList<>();
private String surl="https://api.tianapi.com/wxnew/?key=8d6e3228d25298f13af4fc40ce6c9679&num=10";
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.f1_list, container, false);
lv = view.findViewById(R.id.lv);
return view;
}
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
m = new Myadaper();
lv.setAdapter(m);
//创建数组用于判断
String[] s={surl,"HttpUrlConnection"};
//获取网络连接的类型
int type = Netstateutil.getNewType(getActivity());
if(type!=-1){
Toast.makeText(getActivity(),"我有网络",Toast.LENGTH_SHORT).show();
AsyncTask<String, Void, String> execute = new MAsyncTask().execute(s);
}else{
Toast.makeText(getActivity(),"请检查网络",Toast.LENGTH_SHORT).show();
}
}
public class Myadaper extends BaseAdapter {
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int i) {
return null;
}
@Override
public long getItemId(int i) {
return 0;
}
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
if(view==null){
view=View.inflate(getActivity(),R.layout.aa,null);
}
TextView tv=view.findViewById(R.id.tv);
ImageView iv=view.findViewById(R.id.iv);
tv.setText(list.get(i).getTitle());
//用AsyncTask1传过去有参ImageView控件和接口.刷新图片
new MAsyncTask1(iv).execute(list.get(i).getPicUrl());
return view;
}
}
/**
* 泛型 第一个参数:传过来的url
* 第二个参数 :进度
* 第三个参数 :接口请求成功返回的东西(json,bitmap)
*/
private class MAsyncTask1 extends AsyncTask<String,Void,Bitmap> {
ImageView iv;
public MAsyncTask1(ImageView iv) {
this.iv=iv;
}
/**
* 这个方法在子线程,在这个方法里进行联网操作
* @param strings 可变参数,底层是数组,里面放的是传过来的参数;
* @return
*/
@Override
protected Bitmap doInBackground(String... strings) {
String string = strings[0];
Bitmap bit = Netutil.getNetBitmap(string);
return bit;
}
/**
* 这个方法在主线程, 直接更新ui即可;
* @param s s是doInBackground请求接口成功后返回的json
*/
@Override
protected void onPostExecute(Bitmap bitmap) {
super.onPostExecute(bitmap);
iv.setImageBitmap(bitmap);
}
}
private class MAsyncTask extends AsyncTask<String,Void,String>{
//这是子线程
@Override
protected String doInBackground(String... strings) {
String url = strings[0];
String s = strings[1];
//判断是那种请求方式
if(s.equals("HttpUrlConnection")) {
//直接用工具类获取json
String tostr = Netutil.getNetJson(url);
//返回给(前台方法,主线程方法onPostExecute)
return tostr;
}
return null;
}
//这个是主线程
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
//解析s, 直接给控件展示;
Gson g=new Gson();
Bean bean = g.fromJson(s, Bean.class);
List<Bean.NewslistBean> newslist = bean.getNewslist();
list=newslist;
m.notifyDataSetChanged();
}
}
}
Bean类(解析)
Netstateutil类
package com.bawei.zhangjinfeng20171105.util; import android.content.Context; import android.net.ConnectivityManager; import android.net.NetworkInfo; /** * Created by sky on 2017/11/05. */ public class Netstateutil { /** * 获取手机网络状态 * -1 :无网络 * 0 : 蜂窝网络; * 1 : wifi网络 * @return * @param context 上下文对象 */ public static int getNewType(Context con){ int mState = -1;// 代表无网络 //获取android系统提供的服务, 转换成链接管理类,这个类专门处理链接相关的东西 ConnectivityManager manager = (ConnectivityManager) con.getSystemService(Context.CONNECTIVITY_SERVICE); //manager封装了网络链接的信息 NetworkInfo activeNetworkInfo = manager.getActiveNetworkInfo(); if(activeNetworkInfo==null){ return mState; } //获取网络连接的类型 int type = activeNetworkInfo.getType(); if(type==ConnectivityManager.TYPE_WIFI){//代表现在是wifi网络 mState=1; }else if(type==ConnectivityManager.TYPE_MOBILE){ mState=0; } return mState; } }
Netutil类
XML(忽略)package com.bawei.zhangjinfeng20171105.util; 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; /** * Created by sky on 2017/11/05. */ public class Netutil { private static String tag = "getNetJson"; public static String getNetJson(String urlString) { try { //url对象封装接口字符串 URL url = new URL(urlString); //用url打开连接, 返回值我们用HttpURLConnection HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection(); urlConnection.setConnectTimeout(8000);//设置链接超时时间 int responseCode = urlConnection.getResponseCode(); //获取状态码 if (responseCode == 200) { InputStream inputStream = urlConnection.getInputStream(); BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream)); //可拼接的字符串 StringBuilder stringBuilder = new StringBuilder(); String temp =null; while ((temp = bufferedReader.readLine()) != null) { stringBuilder.append(temp); } String jsonString = stringBuilder.toString(); return jsonString; } else { } } catch (MalformedURLException e) { e.printStackTrace(); Log.e(tag, "getNetJson: " + e.toString()); } catch (IOException e) { e.printStackTrace(); Log.e(tag, "getNetJson: " + e.toString()); } return ""; } /** * 获取网络图片 * * @param urlString * @return */ public static Bitmap getNetBitmap(String urlString) { try { URL url = new URL(urlString); HttpURLConnection httpurlConnection = (HttpURLConnection) url.openConnection(); httpurlConnection.setConnectTimeout(8000);//设置链接超时时间 int responseCode = httpurlConnection.getResponseCode(); if (responseCode == 200) { InputStream inputStream = httpurlConnection.getInputStream(); //BitmapFactory: android提供好的加工图片的工具类, Bitmap bitmap = BitmapFactory.decodeStream(inputStream); return bitmap; } else { //do nothing } } catch (MalformedURLException e) { e.printStackTrace(); Log.e(tag, "getNetBitmap: " + e.toString()); } catch (IOException e) { e.printStackTrace(); Log.e(tag, "getNetBitmap: " + e.toString()); } return null; } }
别忘了权限和依赖