自定義ListView項,異步讀取網絡數據

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);
        }
    }
}
相關文章
相關標籤/搜索