Android动态获取json解析后显示到RecyclerView
16lz
2021-01-24
首先,需要进行获取以及解析的json数据;
{ "code": "200", "tips": "ok", "message": "success", "devices": [ { "deviceid": 1, "userid": 3, "username": "demo", "devicename": "TPYBoard v202", "deviceaddre": "5C:CF:7F:0D:85:65", "addtime": 1436879777 }, { "deviceid": 2, "userid": 3, "username": "demo", "devicename": "MMP", "deviceaddre": "a5:a9:a9:ac:a0:a6", "addtime": 1848919392 } ]}
首先需要了解json是什么类型的,然后再进行转换对象以及数组;
fragmten1.xml界面:
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="com.example.rnd.jsonobjcet.MainActivity"> <LinearLayout android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="wrap_content"> <include layout="@layout/title_layout"/> LinearLayout> <android.support.v7.widget.RecyclerView android:id="@+id/recy" android:layout_width="match_parent" android:layout_height="match_parent" />LinearLayout>
再创建一个他的item动态布局:RecyclerView_item.xml,
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"><LinearLayout android:layout_width="match_parent" android:layout_height="100dp" android:gravity="center" > <LinearLayout android:layout_width="wrap_content" android:layout_height="70dp" android:paddingLeft="10dp" android:orientation="vertical"> <ImageView android:layout_width="70dip" android:layout_height="70dip" android:src="@mipmap/tmw1"/> LinearLayout> <LinearLayout android:layout_width="wrap_content" android:layout_height="70dp" android:paddingLeft="15dp" android:paddingRight="10dp" android:orientation="vertical"> <TextView android:id="@+id/recy_item" android:layout_width="match_parent" android:layout_height="wrap_content" android:textSize="23dp" android:text="Demo"/> <TextView android:id="@+id/recy_time" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="e3:32:66:h5:e3:32:66:h5" android:paddingTop="3dp" android:textSize="15dp"/> LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="70dp" android:orientation="vertical"> <TextView android:layout_width="match_parent" android:layout_height="70dp" android:gravity="right" android:paddingRight="20dp" android:paddingTop="15dp" android:textSize="23dp" android:text="Conent"/> LinearLayout>LinearLayout>RelativeLayout>
再就是创建recy_item_Adapter.java文件了;
package com.example.rnd.jsonobjcet.Adapter;import android.content.Context;import android.support.v7.widget.RecyclerView;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.TextView;import com.example.rnd.jsonobjcet.R;import java.util.ArrayList;import java.util.List;import java.util.Map;/** * Created by rnd on 2018/3/2. */public class recy_item_Adapter extends RecyclerView.Adapter<recy_item_Adapter.ViewHolder> { public List
ok,适配器写好了,就差主java了,FirstFragment.java,我这是底部选项卡fragment界面获取的动态json解析列表;
package com.example.rnd.jsonobjcet.Fragment;import android.app.DownloadManager;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.support.v4.app.Fragment;import android.support.v7.widget.DividerItemDecoration;import android.support.v7.widget.LinearLayoutManager;import android.support.v7.widget.RecyclerView;import android.util.Log;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.ListView;import android.widget.TextView;import com.example.rnd.jsonobjcet.Adapter.recy_item_Adapter;import com.example.rnd.jsonobjcet.R;import com.squareup.okhttp.OkHttpClient;import com.squareup.okhttp.Request;import com.squareup.okhttp.Response;import org.json.JSONArray;import org.json.JSONException;import org.json.JSONObject;import java.io.IOException;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;/** * Created by dm on 16-3-29. * 第一个页面 */public class FirstFragment extends Fragment { public String date; public String title; private TextView datejson; public RecyclerView recyclerview; public List> list=new ArrayList<>(); @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate( R.layout.fragment1, container, false ); recyclerview= view.findViewById(R.id.recy); okhttpDate(); return view; //获取数据 } private void okhttpDate() { Log.i("TAG","--ok-"); new Thread(new Runnable() { @Override public void run() { OkHttpClient client=new OkHttpClient(); Request request=new Request.Builder().url("这里写自己的服务器完整json路径").build(); try { Response sponse=client.newCall(request).execute(); date=sponse.body().string();// //解析 jsonJXDate(date); }catch (IOException e) { e.printStackTrace(); } } }).start(); } private void jsonJXDate(String date) { if(date!=null) { try { JSONObject jsonObject = new JSONObject(date); String resultCode = jsonObject.getString("message"); if (resultCode.equals("success")) { JSONArray resultJsonArray = jsonObject.getJSONArray("devices"); for(int i=0;i map = new HashMap<>(); //获取到json数据中的activity数组里的内容name String name = jsonObject.getString("devicename"); //获取到json数据中的activity数组里的内容startTime String shijian=jsonObject.getString("deviceaddre"); //存入map map.put("name", name); map.put("shijian", shijian); //ArrayList集合 list.add(map); } }// for (int i = 0; i < jsonArray.length(); i++) {// JSONObject jsonObject = jsonArray.getJSONObject(i);// title = jsonObject.getString("devicename");// Map map = new HashMap<>(); // map.put("title", title);// list.add(map);// } Message msg=new Message(); msg.what=1; handler.sendMessage(msg); } catch (JSONException e) { e.printStackTrace(); } } } public Handler handler=new Handler(){ @Override public void handleMessage(Message msg) { switch (msg.what){ case 1: //添加分割线 recyclerview.addItemDecoration(new DividerItemDecoration( getActivity(), DividerItemDecoration.VERTICAL)); recy_item_Adapter recy=new recy_item_Adapter(list,getActivity()); //设置布局显示格式 recyclerview.setLayoutManager(new LinearLayoutManager(getActivity())); recyclerview.setAdapter(recy); break; } } };}
还有就是网络配置需要记得添加:
<uses-permission android:name="android.permission.INTERNET">uses-permission>
最后重点记住:我这个是fragment底部选项卡做的界面列表,若你是anctivity.jav,就创建activity界面,其它数据挪用就ok。
更多相关文章
- Android列表组件ListView使用详解之数据为空提示信息
- android TextView 如何动态获取宽度
- Android(安卓)Laucher3 去掉二级菜单
- android 向数据库写入图片信息 读取图片信息
- Android(安卓)MMS 数据存取数据表
- android中setVisibility的用法
- android之通过Button的监听器往adapter中添加数据时出错
- Android轮播图封装,下拉刷新相结合
- Android中StackView的使用