JSON数据解析后显示在listview上并且可上滑加载更多
2018-04-25 21:13
113 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_35157303/article/details/80085571
JSON文本很简单,只放了两个数据
[{"number":"17817771329.I'm no.1","money":"0"}, {"number":"13538046947","money":"0"}, {"number":"13538046775","money":"0"}, {"number":"13538046740","money":"0"}, {"number":"13538046721","money":"0"}, {"number":"13538046701","money":"0"}, {"number":"13538046639","money":"0"}, {"number":"13538046609","money":"0"}, {"number":"13538046584","money":"0"}, {"number":"13538046581","money":"0"}, {"number":"17817771329I'm no.2","money":"0"}]我已经把JSON文本已经放在DEMO项目里面了。
private void readFromAssets() { try { InputStream is = getAssets().open("test.txt");//此处为要加载的json文件名称 String text = readTextFromSDcard(is); handleCitiesResponse(text); } catch (Exception e) { // TODO Auto-generated catch block Log.d("readFromAssets", e.toString()); } } private String readTextFromSDcard(InputStream is) throws Exception { InputStreamReader reader = new InputStreamReader(is, "GB2312"); BufferedReader bufferedReader = new BufferedReader(reader); StringBuffer buffer = new StringBuffer(""); String str; while ((str = bufferedReader.readLine()) != null) { buffer.append(str); buffer.append("\n"); } return buffer.toString();//把读取的数据返回 }直接获取本地txt文本拿到json数据
如果有服务器的可以直接用方法
private void init() { new Thread(new Runnable() { @Override public void run() { OkHttpClient okHttpClient = new OkHttpClient.Builder(). connectTimeout(10, TimeUnit.SECONDS)//设置连接超时时间 .readTimeout(15, TimeUnit.SECONDS).build();//设置读取超时时间; //服务器返回的地址 Request request = new Request.Builder() .url("http://10.0.2.2:8088/date.json").build(); try { Response response = okHttpClient.newCall(request).execute(); //获取到数据 String date = response.body().string(); //把数据传入解析josn数据方法 handleCitiesResponse(date); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); if(e instanceof SocketTimeoutException) {//判断超时异常 Looper.prepare(); Toast.makeText(getApplicationContext(), "网络超时,请确认网络是否正常。", Toast.LENGTH_LONG).show(); Looper.loop(); } if(e instanceof ConnectException) {//判断连接异常 Looper.prepare(); Toast.makeText(getApplicationContext(), "连接超时,请确认网络是否正常。", Toast.LENGTH_LONG).show(); Looper.loop(); } } }; }).start(); }用okhttp方法获取服务器
url("http://10.0.2.2:8088/date.json")直接把地址修改一下就可以了。
okhttp使用需要在配置build.gradle里加上
compile 'com.squareup.okhttp3:okhttp:3.4.1'在判断连接超时连接异常的时候,不能直接吐司,需要在吐司前后加上
Looper.prepare();
Looper.loop();不然就会出错误
接下来看一下json解析
private void handleCitiesResponse(String date) { //判断数据是空 if (date != null) { try { JSONArray jsonArray = new JSONArray(date); //将字符串转换成jsonObject对象 //遍历*/ for (int i = 0; i<jsonArray.length(); i++) { JSONObject object = jsonArray.getJSONObject(i); Map<String, Object> map = new HashMap<>(); //获取到json数据中的activity数组里的内容name String number = object.getString("number"); //获取到json数据中的activity数组里的内容startTime String money = object.getString("money"); //存入map map.put("number", number); map.put("money", money); //ArrayList集合 list.add(map); } Message message = new Message(); message.what = 1; handler.sendMessage(message); } catch (Exception e) { e.printStackTrace(); } } }重要的部分都用注释加上了,这个也是比较基础的,虽然我也是新手。
listview适配器。
public class Mybaseadapter extends BaseAdapter { ArrayList<Map<String, Object>> getmList() { return mList; } private ArrayList<Map<String, Object>> mList; Mybaseadapter(ArrayList<Map<String, Object>> mList) { this.mList = mList; } @Override public int getCount() { return mList.size(); } @Override public Object getItem(int position) { return list.get(position); } @Override public long getItemId(int position) { return position; }接下来就 3ff7 是把JSON解析的数据绑定在对应的textview上
@Override public View getView(final int position, View convertView, final ViewGroup parent) { // ViewHolder viewHolder = null; final ViewHolder viewHolder; if (convertView == null) { viewHolder = new ViewHolder(); convertView = getLayoutInflater().inflate(R.layout.listview_text, null); viewHolder.number = (TextView) convertView.findViewById(R.id.tv1); viewHolder.money = (TextView) convertView.findViewById(R.id.tv2); // viewHolder.no = convertView.findViewById(R.id.tv); convertView.setTag(viewHolder); } else { viewHolder = (ViewHolder) convertView.getTag(); } Map<String, Object> bean = mList.get(position); viewHolder.number.setText(bean.get("number").toString()); viewHolder.money.setText(bean.get("money").toString()); // viewHolder.no.setText(position + "/" + mList.size() + "/" + list.size()); return convertView; }布局里比较简单,主布局只放了一个listview
内容布局放了2个textview
还有一个加载布局。
附上效果图
适合新手参考,demo可以直接用,不复杂。
相关文章推荐
- UITableView 分页显示、加载更多,数据源远程数据,解析JSON,以及iOS☞Category
- android结合异步任务,动态加载图片,Json解析数据展示在ListView,并且实现按日期分类展示,借口回调
- UITableView 分页显示、加载更多,数据源远程数据,解析JSON,以及iOS☞Category
- 安卓中获取服务端json数据,使用JSONObject解析,并通过ListView显示出来
- Android中数据文件解析(Json解析【从服务器端获取数据并且解析,显示在客户端上面】)
- Android中数据文件解析(Json解析【从服务器端获取数据并且解析,显示在客户端上面】)
- 利用百度APIStoreSDK获取Json数据并解析加载到ListView上
- 点击加载更多(适用于listview在scrollview单行显示修正后多数据加载慢的情况)
- ListView显示数据库的数据-采用自定义布局-向上滑动可以加载更多数据
- 请求网络数据,解析JSON,显示在listview上(采用thread,handler)
- Android学习 (十八) 用GSON解析JSON数据并在ListView中显示
- json数据解析并显示在listView上
- Android Studio3 在listview上显示解析的json数据
- Android中数据文件解析(Json解析【从服务器端获取数据并且解析,显示在客户端上面】)
- Android中数据文件解析(Json解析【从服务器端获取数据并且解析,显示在客户端上面】)
- Android中数据文件解析(Json解析【从服务器端获取数据并且解析,显示在客户端上面】)
- Json文件放入Assets文件,读取解析并且放入listview中显示。
- Json--Android中数据文件解析(Json解析--从服务器端获取数据并且解析,显示在客户端上面)
- Android中数据文件解析(Json解析【从服务器端获取数据并且解析,显示在客户端上面】)
- Android访问网络:服务端返回XML或JSON格式数据,Android 进行解析并使用ListView显示