//权限和依赖
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>compile 'com.google.code.gson:gson:2.2.4'
//网络连接类public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //获取网络连接的类型 int type = NetstateUtil.getNewType(MainActivity.this); if(type!=-1){ Toast.makeText(this,"我有网络",Toast.LENGTH_SHORT).show(); }else{ Toast.makeText(this,"请检查网络",Toast.LENGTH_SHORT).show(); } } }
//mainprivate ListView lv; String surl="https://www.toutiao.com/api/pc/focus/"; //先创建集合,用于更新listview List<com.a1511j.day03_rk3.Bean.bean.DataBean.PcFeedFocusBean> list=new ArrayList<>(); private Myadaper m;@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); int i = Netwang.toint(MainActivity.this); if(i!=-1){ Toast.makeText(this,"我有网络",Toast.LENGTH_SHORT).show(); lv = (ListView) findViewById(R.id.lv); m = new Myadaper(); lv.setAdapter(m); //直接调用asyncTask类请求网络,把url传进去 AsyncTask<String, Void, String> execute = new MAsyncTask().execute(surl); }else{ Toast.makeText(this,"请连接网络",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(MainActivity.this,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("http:"+list.get(i).getImage_url()); 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) { final String url = strings[0]; //直接用工具类获取json String tostr = Netutil.getNetJson(url); //返回给(前台方法,主线程方法onPostExecute) return tostr; } //这个是主线程 @Override protected void onPostExecute(String s) { super.onPostExecute(s); //解析s, 直接给控件展示; Gson g=new Gson(); bean bean = g.fromJson(s, bean.class); com.a1511j.day03_rk3.Bean.bean.DataBean data = bean.getData(); //把一个集合的数据放入另一个集合 List<com.a1511j.day03_rk3.Bean.bean.DataBean.PcFeedFocusBean> focus = data.getPc_feed_focus(); list.addAll(focus); m.notifyDataSetChanged(); } }