仅做个人总结和学习记录,观者莫喷,谢谢。
上一篇写了ListView的简单适配,数据静态的,今天呢,我又写了一个怎么去联网获取数据并且填空到ListView中,不多说,直接上代码:
package com.example.administrator.myapplication; import android.annotation.SuppressLint; import android.content.Intent; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.drawable.BitmapDrawable; import android.net.Uri; import android.os.AsyncTask; import android.os.Handler; import android.os.Message; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.Button; import android.widget.ImageView; import android.widget.ListView; import android.widget.TextView; import android.widget.Toast; import com.facebook.drawee.backends.pipeline.Fresco; import com.facebook.drawee.interfaces.DraweeController; import com.facebook.drawee.view.SimpleDraweeView; import com.squareup.okhttp.Callback; import com.squareup.okhttp.OkHttpClient; import com.squareup.okhttp.Request; import com.squareup.okhttp.Response; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import java.io.IOException; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; import java.util.ArrayList; import java.util.List; import bean.new_bean; import tools.BitmapManager; public class MainActivity extends AppCompatActivity { private Button bt, bt1; private ListView listView; private String[] st = {"语文", "数学", "英语", "化学", "物理", "生物", "科学", "张三", "李四", "王五", "哈哈", "呵呵", "第一", "第二", "第四", "第五", "第六", "第七", "第八", "第九", "第十"}; private String httplist = "http://litchiapi.jstv.com/api/GetFeeds?column=3&PageSize=10&pageIndex=1&val=100511D3BE5301280E0992C73A9DEC41"; private OkHttpClient okHttpClient; private List<new_bean> arrayList; // private MyList myList; @SuppressLint("HandlerLeak") private Handler mHandler = new Handler() { @Override public void handleMessage(Message msg) { super.handleMessage(msg); switch (msg.what) { case 0: MyList myList = new MyList(arrayList); listView.setAdapter(myList); break; default: break; } } }; @Override protected void onCreate(Bundle savedInstanceState) {//不显示,准备阶段 super.onCreate(savedInstanceState); Fresco.initialize(this); setContentView(R.layout.test); Log.d("MainActivity", this.toString()); // Log.i("TAG","onCreate"); okHttpClient = new OkHttpClient(); initView(); initData(); } // @Override protected void onStart() {//不显示界面 super.onStart(); Log.d("MainActivity", "onStart"); } // // @Override // protected void onResume() {//界面显示 // super.onResume(); // Log.i("TAG","onResume"); // } // // @Override // protected void onPause() {//跳转之前回到达此处 // super.onPause(); // Log.i("TAG","onPause"); // } // // @Override // protected void onRestart() { // super.onRestart(); // Log.i("TAG","onRestart"); // } // // @Override // protected void onStop() { // super.onStop(); // Log.i("TAG","onStop"); // } // // @Override // protected void onDestroy() { // super.onDestroy(); // Log.i("TAG","onDestroy"); // } class MyList extends BaseAdapter { private List<new_bean> list; public MyList(List<new_bean> list) { super(); this.list = list; } @Override public int getCount() { return arrayList.size(); } @Override public Object getItem(int position) { return arrayList.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHoder viewHoder; if (convertView == null) { convertView = LayoutInflater.from(MainActivity.this).inflate(R.layout.listvist_xml, null); viewHoder = new ViewHoder(); viewHoder.textView = (TextView) convertView.findViewById(R.id.text1); viewHoder.iv_image = (ImageView) convertView.findViewById(R.id.iv_image); viewHoder.fb_image = (SimpleDraweeView) convertView.findViewById(R.id.fb_image); viewHoder.tv_content = (TextView) convertView.findViewById(R.id.tv_content); convertView.setTag(viewHoder); } else { viewHoder = (ViewHoder) convertView.getTag(); } new_bean newBean = arrayList.get(position); List<new_bean.data> list_data = newBean.getData1(); if (list_data != null) { for (new_bean.data na : list_data) { viewHoder.fb_image.setTag(na.getCover()); viewHoder.textView.setText(na.getSubject()); viewHoder.tv_content.setText(na.getSummary()); Uri uri = Uri.parse(na.getCover()); Log.d("bbb", "na." + na.getCover()); viewHoder.fb_image.setImageURI(uri); DraweeController controller = Fresco.newDraweeControllerBuilder() .setUri(uri) //设置点击重试是否开启 .setTapToRetryEnabled(true) //设置旧的Controller .setOldController(viewHoder.fb_image.getController()) .build(); viewHoder.fb_image.setController(controller); } } return convertView; } class ViewHoder { SimpleDraweeView fb_image; ImageView iv_image; TextView textView, tv_content; } } private void http() { Request request = new Request.Builder().url(httplist).build(); okHttpClient.newCall(request).enqueue(new Callback() { @Override public void onFailure(Request request, IOException e) { Log.e("TAG", "onFailure() e=" + e); } @Override public void onResponse(Response response) throws IOException { String res = response.body().string(); Log.d("TAG", "我是获取的数据" + res); if (res != null && !"".equals(res)) { json(res); } } }); } private void json(String ress) { try { JSONObject jsonObject = new JSONObject(ress); String status = jsonObject.getString("status"); JSONObject jsonObject1 = jsonObject.getJSONObject("paramz"); JSONArray jsonArray = jsonObject1.getJSONArray("feeds"); for (int i = 0; i < jsonArray.length(); i++) { JSONObject jsonObject2 = jsonArray.getJSONObject(i); new_bean newBean = new new_bean(); newBean.setId(jsonObject2.getString("id")); newBean.setOid(jsonObject2.getString("oid")); newBean.setCategory(jsonObject2.getString("category")); JSONObject strr = jsonObject2.getJSONObject("data"); List<new_bean.data> list = new ArrayList<new_bean.data>(); new_bean.data nd = new new_bean.data(); nd.setSubject(strr.getString("subject")); nd.setSummary(strr.getString("summary")); nd.setCover("http://litchiapi.jstv.com" + strr.getString("cover")); nd.setPic(strr.getString("pic")); nd.setFormat(strr.getString("format")); nd.setChanged(strr.getString("changed")); list.add(nd); newBean.setData1(list); arrayList.add(newBean); } mHandler.obtainMessage(0).sendToTarget(); } catch (Exception e) { e.printStackTrace(); } } private void initData() { arrayList.clear(); http(); bt1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { for (new_bean nn : arrayList ) { List<new_bean.data> ll = nn.data1; for (new_bean.data aa : ll ) { Log.d("TAG", "+++++" + aa.getCover().toString()); } } } }); } public void initView() { arrayList = new ArrayList<new_bean>(); bt = (Button) findViewById(R.id.bt_test); bt1 = (Button) findViewById(R.id.bt_test1); listView = (ListView) findViewById(R.id.listView); } }
--------------------------------------------分割线----------------------------------------
这是我在上一篇的基础上改的,一个简单的网络数据加载,运用了第三方框架的,如:图片加载我用的是Fresco(中文叫壁画)、网络请求我用的是Okhttp,有需要这两个jar的可以私我;
后续还会在这代码上进行分页,刷新,点击,等常用功能编写完善;
上面代码哪里有问题的麻烦指出,谢谢;