從接口讀取數據,Json解析後顯示在RecyclerView上

第一步

導入volley框架,以便進行網絡請求,並添加依賴

第二步

添加網絡權限,在AndroidManifest.xml中添加

<uses-permission android:name="android.permission.INTERNET" />

第三步

編寫請求數據代碼

URL可以自己填寫

在JsonObjectRequest中的onResponse,它的參數response就是json數據了。

至此,通過網絡請求到數據,下面寫RecyclerView

第一步,導入支持包

在build.gardle文件中添加

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    compile 'com.android.support:appcompat-v7:23.1.1'
    compile 'com.android.support:recyclerview-v7:23.1.1'

(Android Studio)

第二步

寫佈局

在主佈局中加入recyclerView

<android.support.v7.widget.RecyclerView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/recycler_view"
    />

再寫item佈局

第三步

編寫Adapter和ViewHolder

public class RecyclerViewAdapter<T> extends RecyclerView.Adapter<RecyclerViewAdapter.myViewHolder>{
    private List<T> mDatas;
    //構造函數
    public RecyclerViewAdapter(List<T> dataSet){
        mDatas=dataSet;
    }
    @Override
    public myViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
        myViewHolder holder=new myViewHolder(View.inflate(viewGroup.getContext(), R.layout.itemlayout, null));
        return holder;
    }
    //綁定數據
    //將數據模型的title和publishtime賦給兩個TextView顯示
    @Override
    public void onBindViewHolder(myViewHolder holder, int i) {

        DataModel.data dataModel=(DataModel.data)mDatas.get(i);
        holder.tv.setText(dataModel.getTitle());
        holder.tv02.setText(dataModel.getPublishtime());
    }
    @Override
    public int getItemCount() {
        return mDatas.size();
    }
    //ViewHolder類
    public static class myViewHolder extends RecyclerView.ViewHolder{
        TextView tv;
        TextView tv02;
        public myViewHolder(View itemView)
        {
            super(itemView);
            tv = (TextView) itemView.findViewById(R.id.recycler_item1_title);
            tv02=(TextView)itemView.findViewById(R.id.recycler_item2_author);
        }
    }
}

此時在onCreate中需要的全局變量有

private RecyclerView recyclerView;
private Context context;
private RequestQueue mQueue;

同時Mainactivity要繼承

AppCompatActivity 

寫到這裏,下面需要寫model,要根據json的格式寫,可以在oncreate中寫

context = getApplicationContext();
//這個一定順序一定要對啊
initRequestQueue();
getDataByVolley();


然後在getDataByVolley中loge一下response到控制檯,查看數據

第四步

寫DataModel


public class DataModel {
    /*{
    "data": [
        {
            "createtime": "2016-01-12 16:00:07",
            "summary": "",
            "pageurl": "http:\/\/123.59.65.71\/lczx\/index.php\/news\/show\/qWPLivao",
            "id": "120447",
            "title": "“止不住”的油價逼近30美元大關 數個OPEC成員國要求開緊急會議",
            "thumbnail": "http:\/\/posts.cdn.wallstcn.com\/c3\/c7\/7a\/cfp470821056.jpg!index-news-cover",
            "source": "8",
            "publishtime": "2016-01-12 15:52:28",
            "sourcename": "華爾街見聞",
            "comments": "6"
        },
        {
            "createtime": "2016-01-12 16:00:09",
            "summary": "",
            "pageurl": "http:\/\/123.59.65.71\/lczx\/index.php\/news\/show\/5AGuPKJm",
            "id": "120472",
            "title": "險守3000點滬指微漲0.2% 創業板漲2%",
            "thumbnail": "http:\/\/posts.cdn.wallstcn.com\/58\/51\/fd\/bigstock-stock-market-trading-43526122.jpg!index-news-cover",
            "source": "8",
            "publishtime": "2016-01-12 15:50:39",
            "sourcename": "華爾街見聞",
            "comments": "0"
        },*/


    private List<data> data;

    public void setData(List<DataModel.data> data) {
        this.data = data;
    }

    public List<DataModel.data> getData() {
        return data;
    }





    public static class data {
        public String createtime;
        public String summary;
        public String pageurl;
        public String id;
        public String title;
        public String thumbnail;
        public String source;
        public String publishtime;
        public String sourcename;
        public String comments;


        public void setId(String id) {
            this.id = id;
        }

        public String getId() {
            return id;
        }

        public void setTitle(String title) {
            this.title = title;
        }

        public String getTitle() {
            return title;
        }

        public void setPublishtime(String publishtime) {
            this.publishtime = publishtime;
        }

        public String getPublishtime() {
            return publishtime;
        }

        @Override
        public String toString() {
            return "Person [id=" + id + ", title=" + title + ", publishtime=" + publishtime + "]";
        }
    }

}

然後在MainActivity中寫

recyclerView=(RecyclerView)findViewById(R.id.recycler_view);
//使recyclerview保持固定的大小
recyclerView.setHasFixedSize(true);

//設置佈局管理器,實現橫向或數值滾動的列表佈局
RecyclerView.LayoutManager layoutManager=new LinearLayoutManager(context);
recyclerView.setLayoutManager(layoutManager);


//recyclerView的adapter,adapter要爲全局的
 mAdapter=new RecyclerViewAdapter(mDatas);
recyclerView.setAdapter(mAdapter);

在輸出json數據的地方解析數據並通知適配器更換數據


目前只是顯示出來,沒有好看的樣子。






發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章