第一步
導入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數據的地方解析數據並通知適配器更換數據
目前只是顯示出來,沒有好看的樣子。