1--- 联网权限
2 -- 主线程调用AsyncTask类实例调用
/**
* 1 MAsyncTask在主线程实例化;
* 2 doInBackground在子线程,会把子线程请求的数据发送给在主线程运行的方法(onPostExecute)
* 3 底层原理是Handler+Thread;
*/
new MAsyncTask().execute(urlString);
3--- 编写AsyncTask类;
要求:
1. 主页面使用ListView显示内容(10分)
2. 进入页面之后判断网络状态是否可用(10分)
3. 当页面不可用时弹出吐司提示,页面可用时使用网络加载数据(10分)
4. 实例化AsyncTask的对象并重写其中4个方法(10分)
5. 使用HttpURLConnection创建网络请求,创建连接对象并返回网络数据(10分)
6. 在完成的回调方法中解析获取到的数据(10分)
7. 创建列表的适配器,传入类型为解析后的数据类型(10分)
8. 完成适配器的优化和刷新(10分)
9. 适配器中展示图片的时候图片地址(image_url字段)前面加上”http:”再做展示(10分)
package com.example.rk112; import android.graphics.Bitmap; import android.os.AsyncTask; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; 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.example.rk112.javabeab.Itoos; import com.example.rk112.javabeab.Utils; import com.example.rk112.javabeab.bean; import com.google.gson.Gson; import java.util.ArrayList; import java.util.List; public class MainActivity extends AppCompatActivity { private ListView lv; //路径 private String Urlhttp = "https://www.toutiao.com/api/pc/focus/"; //集合 List<com.example.rk112.javabeab.bean.DataBean.PcFeedFocusBean> list=new ArrayList<com.example.rk112.javabeab.bean.DataBean.PcFeedFocusBean>(); private Myadapet myadapet; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //获取控件 lv = (ListView) findViewById(R.id.lv); //实例化适配器 myadapet = new Myadapet(); //获取网络类型 int netype = Utils.getNetype(this); //是否有网 if (netype !=-1) { //获取适配器 lv.setAdapter(myadapet); //实力化类并执行; new Myasyntask().execute(Urlhttp);//Urlhttp路径 } else { Toast.makeText(this, "没有网络", Toast.LENGTH_SHORT).show(); } ; } class Myasyntask extends AsyncTask<String, Void, String> { //子线程运行的方法 @Override protected String doInBackground(String... strings) { //strings数组 String jiexi = strings[0]; //实力化解析的方法类 String ioss = Itoos.ioss(jiexi); return ioss; } @Override//回调成功的方法 protected void onPostExecute(String s) {// s就是回调的是ioss super.onPostExecute(s); //实力化gson Gson g = new Gson(); //获取解析的类 bean bean = g.fromJson(s, bean.class);//bean.class类 //获取data类 com.example.rk112.javabeab.bean.DataBean data = bean.getData(); //获取pc_feed_focus数组 List<com.example.rk112.javabeab.bean.DataBean.PcFeedFocusBean> pc_feed_focus = data.getPc_feed_focus(); //pc_feed_focus集合放入list的集合 list.addAll(pc_feed_focus); //刷新 myadapet.notifyDataSetChanged(); } } //获取图片的Asyntask的类 // 1.String :Url路径 // 2.Void :进度 // 3.Bitmap :图片 class Myasyntaskimag extends AsyncTask<String, Void, Bitmap>{ ImageView img; //有参构造 public Myasyntaskimag(ImageView img) { this.img=img; } @Override protected Bitmap doInBackground(String... strings) { String string = strings[0]; Bitmap bit = Itoos.bit(string); return bit; } @Override protected void onPostExecute(Bitmap bitmap) { super.onPostExecute(bitmap); img.setImageBitmap(bitmap); } } class Myadapet 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(getApplicationContext(),R.layout.f1,null); } ImageView img =(ImageView) view.findViewById(R.id.img); TextView tv = (TextView)view.findViewById(R.id.tv); tv.setText(list.get(i).getTitle()); //实力化获取图片的Asyntask的类并把图片控件传过去 new Myasyntaskimag(img).execute("http:"+list.get(i).getImage_url());//"http:"+list.get(i).getImage_url()路径 return view; } } }