网络连接+HttpUrlConnection+AsyncTask
来源:互联网 发布:百度搜索排名算法 编辑:程序博客网 时间:2024/06/05 18:39
代码演示
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类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; }}XML(忽略)
别忘了权限和依赖
阅读全文
0 0
- 网络连接+HttpUrlConnection+AsyncTask
- HttpUrlConnection网络连接
- HttpUrlConnection 网络连接
- Android网络编程 HttpUrlConnection HttpClient AsyncTask
- AsyncTask与HttpURLConnection下载网络图片
- AsyncTask 与 HttpURLConnection获取网络数据
- 网络连接+HttpClient+AsyncTask
- AsyncTask+HttpURLConnection
- android 网络连接1:HttpURLConnection
- 网络连接——HttpURLConnection
- Android的网络连接HttpUrlConnection
- HttpURLConnection和HttpClient连接网络
- 再探网络连接--HttpURLConnection
- Http访问网络(AsyncTask 异步加载和使用HttpURLConnection)
- AsyncTask+HttpUrlConnection网络请求解析XML且定位
- Android网络连接之HttpURLConnection和HttpClient
- HttpURLConnection时遇到网络连接失败
- android-HttpClient和HttpURLConnection判断网络连接
- 5.1
- 如何用线程Asynctask获取网络数据
- 不依赖具体activity弹出全局性弹窗
- MySQL之视图
- 正则表达式
- 网络连接+HttpUrlConnection+AsyncTask
- LeetCode.500 Keyboard Row
- Hessian的基本使用
- 前端开发者不得不知的ES6十大特性
- 不知道该学哪种编程语言?因为你还没进来看!
- 11.5
- Spring3.x知识点总结
- SSL2835 2017年11月4日提高组T2 字典序(堆+拓扑序)
- JavaScript编程精粹——继承篇