自定义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);
        }
    }
}
相关文章
相关标签/搜索