package one.jieyun.test_listview; import android.content.Context; import android.os.AsyncTask; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.util.Log; import android.view.View; import android.widget.BaseAdapter; import android.widget.ListView; import java.util.ArrayList; import java.util.List; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import android.support.v4.widget.SwipeRefreshLayout; public class MainActivity extends AppCompatActivity { private String TAG = "MainActivity->"; private ListView lvData; private SwipeRefreshLayout mSwipeLayout; private ChatAdapter mChatAdapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); lvData = (ListView)findViewById(R.id.listview); mSwipeLayout = (SwipeRefreshLayout) findViewById(R.id.swipeRefresh); mSwipeLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() { @Override public void onRefresh() { Log.i(TAG,"loading......"); loadData(); } }); loadData(); } private void loadData(){ //开始请求数据 mSwipeLayout.setRefreshing(true); RemoteDataSource rs = new RemoteDataSource(); rs.execute("http://m.scykw.cn/api/ajzw/home.json"); } private void FillListView(List<Message> messages){ lvData.setAdapter(null); mChatAdapter = new ChatAdapter(getApplicationContext(), messages); lvData.setAdapter(mChatAdapter); mSwipeLayout.setRefreshing(false); } private class RemoteDataSource extends AsyncTask<String, Integer, List<Message>> { //onPreExecute方法用于在执行后台任务前作一些UI操做 @Override protected List<Message> doInBackground(String... params) { String context = NetUtils.get(params[0]); try { JSONObject jsonObject = new JSONObject(context); JSONArray strArr = jsonObject.getJSONArray("sliders"); List<Message> msgList = new ArrayList<Message>(); List<Slider> sliders = new ArrayList<Slider>(); for(int i=0;i<strArr.length();i++){ JSONObject obj = strArr.getJSONObject(i); String image = obj.getString("image"); sliders.add(new Slider(image,null)); } msgList.add(new Message(ChatAdapter.ITEM_TOPSLIDER,"",sliders)); return msgList; } catch (JSONException e) { Log.i(TAG, "Error:" + e); return null; } } /** * 这里的String参数对应AsyncTask中的第三个参数(也就是接收doInBackground的返回值) * 在doInBackground方法执行结束以后在运行,而且运行在UI线程当中 能够对UI空间进行设置 */ @Override protected void onPostExecute( List<Message> result) { Log.i(TAG, "异步操做执行结束:" + result.size()); FillListView(result); } //该方法运行在UI线程当中,而且运行在UI线程当中 能够对UI空间进行设置 @Override protected void onPreExecute() { Log.i(TAG,"开始执行异步线程"); } /** * 这里的Intege参数对应AsyncTask中的第二个参数 * 在doInBackground方法当中,,每次调用publishProgress方法都会触发onProgressUpdate执行 * onProgressUpdate是在UI线程中执行,全部能够对UI空间进行操做 */ @Override protected void onProgressUpdate(Integer... values) { Log.i(TAG,"完成:" + values); } } }