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); } } }