public class MainActivity extends AppCompatActivity {
//文字信息的地址 public String urlString = "http://api.expoon.com/AppNews/getNewsList/type/1/p/1"; //图片地址 String urlBitmap = "https://img-my.csdn.net/uploads/201407/26/1406383265_8550.jpg"; private ListView lv; List<JsonBeen.DataBean> list=new ArrayList<>(); private MyAdapter myAdapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); lv = (ListView) findViewById(R.id.lv); //直接调用asyncTask类请求网络,把url传进去 myAdapter = new MyAdapter(); lv.setAdapter(myAdapter); //这行代码要在主线程调用; new MyAsyncTask().execute(urlString); } //lv的适配器 class MyAdapter 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.child,null); } //获取tv和iv 赋值 TextView tv = view.findViewById(R.id.tv); tv.setText(list.get(i).getNews_summary()); ImageView iv = view.findViewById(R.id.iv); //iv.setImageBitmap(); new MyBitmapAsyncTask(iv).execute(urlBitmap); return view; } } /** * 泛型 第一个参数:传过来的url * 第二个参数 :进度 * 第三个参数 :接口请求成功返回的东西(json,bitmap) */ class MyAsyncTask extends AsyncTask<String,Void,String>{ /** * 这个方法在子线程,在这个方法里进行联网操作 * * @param strings 可变参数,底层是数组,里面放的是传过来的参数; * @return */ @Override protected String doInBackground(String... strings) { String s = strings[0]; //直接用工具类获取json String netJson = Utils.getNetJson(s); return netJson;//返回给(前台方法,主线程方法onPostExecute) } /** * 这个方法在主线程, 直接更新ui即可; * @param s s是doInBackground请求接口成功后返回的json */ @Override protected void onPostExecute(String s) { super.onPostExecute(s); //解析s, 直接给控件展示; Gson gson = new Gson(); JsonBeen jsonBeen = gson.fromJson(s, JsonBeen.class); //把一个集合的数据放入另一个集合 List<JsonBeen.DataBean> data = jsonBeen.getData(); list.addAll(data); //更新集合 myAdapter.notifyDataSetChanged(); } } class MyBitmapAsyncTask extends AsyncTask<String,Void,Bitmap>{ private ImageView iv; public MyBitmapAsyncTask(ImageView iv){ this.iv = iv; } @Override protected Bitmap doInBackground(String... strings) { return Utils.getNetBitmap(strings[0]);//返回从工具类中获取的bitmap } @Override protected void onPostExecute(Bitmap bitmap) { super.onPostExecute(bitmap); iv.setImageBitmap(bitmap);//给iv赋值 } } }
(工具类)
public class Utils { 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(); //判断 200为成功码 if (responseCode==200){ InputStream inputStream = urlConnection.getInputStream(); BufferedReader br = new BufferedReader(new InputStreamReader(inputStream)); StringBuffer sb = new StringBuffer(); String line=null; while ((line=br.readLine())!=null){ sb.append(line); } return sb.toString(); }else { //啥也不干…… } } catch (Exception e) { e.printStackTrace(); } return null; } public static Bitmap getNetBitmap(String urlstring){ try { URL url = new URL(urlstring); HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection(); urlConnection.setConnectTimeout(8000); int responseCode = urlConnection.getResponseCode(); if (responseCode==200){ InputStream inputStream = urlConnection.getInputStream(); //BitmapFactory: android提供好的加工图片的工具类, Bitmap bitmap = BitmapFactory.decodeStream(inputStream); return bitmap; }else { //啥也不干…… } } catch (Exception e) { e.printStackTrace(); } return null; } }