Android ListView显示访问WebServices返回的JSON结果

1、WebServices的返回结果

2、ListView内容布局代码

<?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="wrap_content"
    android:background="@color/colorWhite"
    >

    <ImageView
        android:id="@+id/app_icon"
        android:layout_width="30dp"
        android:layout_height="30dp"
        android:layout_centerVertical="true"
        android:layout_marginLeft="5dp"
        android:layout_marginTop="5dp"

        android:src="@mipmap/ic_launcher_round1" />

    <TextView
        android:id="@+id/customitem"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_toRightOf="@id/app_icon"
        android:gravity="center"
        android:paddingLeft="20dp"
        android:text="app name"
        android:textSize="20sp"
        android:textColor="@color/colorPrimaryDark"
        android:layout_marginTop="5dp"/>

    <TextView
        android:id="@+id/customdesc"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/customitem"
        android:layout_toRightOf="@id/app_icon"
        android:gravity="center"
        android:paddingLeft="20dp"
        android:singleLine="true"
        android:text="app describe"
        android:textSize="14sp"
        android:textColor="@color/colorPrimaryDark"
        android:layout_marginBottom="5dp"/>

</RelativeLayout>

3、Adapter的代码

 1 import android.content.Context;
 2 import android.view.LayoutInflater;
 3 import android.view.View;
 4 import android.view.ViewGroup;
 5 import android.widget.BaseAdapter;
 6 import android.widget.ImageView;
 7 import android.widget.TextView;
 8
 9 import java.util.List;
10 import java.util.Map;
11
12 public class MyCustomAdapter extends BaseAdapter {
13     private Context context;
14     private List<Map<String,Object>> list;
15     private LayoutInflater inflater;
16     public MyCustomAdapter(List<Map<String,Object>> list, Context context)
17     {
18         this.context=context;
19         this.list=list;
20         inflater=LayoutInflater.from(context);
21     }
22     @Override
23     public int getCount() {
24         return list==null?0:list.size();
25     }
26
27     @Override
28     public Object getItem(int position) {
29         return   position;
30     }
31
32     @Override
33     public long getItemId(int position) {
34         return position;
35     }
36     class ViewHolder{
37         public ImageView imageView;
38         public TextView appText;
39         public TextView descText;
40     }
41
42     @Override
43     public View getView(int position, View convertView, ViewGroup parent) {
44         ViewHolder holder =null;
45         if (holder == null){
46             holder=new ViewHolder();
47             if(convertView ==null){
48                 convertView=inflater.inflate(R.layout.drawelist,null);
49                 holder.imageView = (ImageView) convertView.findViewById(R.id.app_icon);
50                 holder.appText = (TextView) convertView.findViewById(R.id.customitem);
51                 holder.descText = (TextView) convertView.findViewById(R.id.customdesc);
52                 convertView.setTag(holder);
53             }else {
54                 //根据Tag获取已经存在的ViewHolder
55                 holder = (ViewHolder) convertView.getTag();
56             }
57             //设置显示内容
58             holder.appText.setText(list.get(position).get("name").toString());
59             holder.descText.setText(list.get(position).get("desc").toString());
60             holder.imageView.setBackgroundResource((Integer)list.get(position).get("image"));
61         }
62
63         return convertView;
64     }
65
66
67 }

4、访问WEB代码

 1  public static List<EmpInfo> GetEmpInfo(String PageNum, String PageSize, String strwhere) {
 2
 3
 4         List<EmpInfo> listEmpinfo = new ArrayList<>();
 5         InputStreamReader in = null;
 6         try {
 7             final String SERVER_URL = GlobalAppliaction.WebUrl + "GetEmpList";
 8             HttpPost request = new HttpPost(SERVER_URL); // 根据内容来源地址创建一个Http请求
 9             List params = new ArrayList();
10             params.add(new BasicNameValuePair("PageNum", PageNum)); // 添加必须的参数
11             params.add(new BasicNameValuePair("PageSize", PageSize)); // 添加必须的参数
12             params.add(new BasicNameValuePair("strwhere", strwhere)); // 添加必须的参数
13             request.setEntity(new UrlEncodedFormEntity(params, org.apache.http.protocol.HTTP.UTF_8)); // 设置参数的编码
14             HttpResponse httpResponse = new DefaultHttpClient().execute(request); // 发送请求并获取反馈
15
16             // 解析返回的内容
17             if (httpResponse.getStatusLine().getStatusCode() != 404) {
18                 InputStream inputStream = httpResponse.getEntity().getContent();
19                 in = new InputStreamReader(inputStream);
20                 BufferedReader bufferedReader = new BufferedReader(in);
21
22                 StringBuffer strBuffer = new StringBuffer();
23                 String line = null;
24                 while ((line = bufferedReader.readLine()) != null) {
25                     strBuffer.append(line);
26                 }
27                 inputStream.close();
28                 bufferedReader.close();
29                 String result = strBuffer.toString();
30
31
32                 String errCode = "";
33
34                 String strresult = "";
35                 JSONObject root = new JSONObject(result);
36
37                 errCode = root.getString("Code");
38                 if (errCode.equals("1")) {
39                     strresult = root.getString("Result");
40
41
42                     JSONArray array = root.getJSONArray("Result");//解析result
43                     Gson gson = new Gson();
44                     listEmpinfo = gson.fromJson(strresult, new TypeToken<List<EmpInfo>>() {
45                     }.getType());
46
47
48
49                 }
50
51                 return listEmpinfo;
52
53
54             }
55
56
57         } catch (IOException e) {
58             e.printStackTrace();
59             Log.d("debug", e.toString());
60             return null;
61         } catch (JSONException e) {
62             e.printStackTrace();
63             return null;
64         } finally {
65
66             if (in != null) {
67                 try {
68                     in.close();
69                 } catch (IOException e) {
70                     e.printStackTrace();
71                 }
72             }
73         }
74         return listEmpinfo;
75     }

5、UI展示获取结果

//启动后台任务
     GetWebResultTask   queryAddressTask = new GetWebResultTask();
//分页显示
        queryAddressTask.execute("1", "10", "");
  ArrayList<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
    Map<String, Object> map;
 public class GetWebResultTask extends AsyncTask<String, Integer, List<EmpInfo>> {
        @Override
        protected List<EmpInfo> doInBackground(String... params) {
            List<EmpInfo> GetResult = null;
            try {
                GetResult = WebByHttp.GetEmpInfo(params[0], params[1], params[2]);

            } catch (Exception e) {
                e.printStackTrace();
            }
            //将结果返回给onPostExecute方法
            return GetResult;

        }

        //此方法可以在主线程改变UI
        protected void onPostExecute(List<EmpInfo> result) {

            try {

                for (int ii = 0; ii < result.size(); ii++) {
                    map = new HashMap<String, Object>();
                    map.put("image", R.drawable.ic_launcher_background);
                    map.put("name", result.get(ii).EmpName);
                    map.put("desc", result.get(ii).CreateTime);
                    list.add(map);
                }
                myCustomAdapter = new MyCustomAdapter(list, getActivity());
                listviewemp.setAdapter(myCustomAdapter);
                listviewemp.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                    @Override
                    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                        Toast.makeText(getActivity(), list.get(position).get("name").toString(), Toast.LENGTH_LONG).show();
                    }
                });

            } catch (Exception e) {
                e.printStackTrace();
            }

        }
    }

6、界面效果

原文地址:https://www.cnblogs.com/lzsin/p/10632994.html

时间: 2024-10-07 23:06:21

Android ListView显示访问WebServices返回的JSON结果的相关文章

Android Listview显示混乱问题

在使用自定义ListView视图时,经常会采用重用ListView中视图的方式来提高滑动和显示效率,但是随之而来的一个问题是listview中数据经常显示混乱. 通常情况下,我们重写的方法是这样的: inflater = LayoutInflater.from(context); @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder; if (conv

Android ListView显示倒计时的流畅实现

有人在群里问他实现的倒计时在ListView中很卡,有没有好的方案,我就闲来没事,实现了一下,供参考 package com.microchange; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import com.microchange.view.TimeView; import com.microchange.view.applicati

Android 自定义 ListView 显示网络歌曲列表

本文内容 环境 项目结构 演示自定义 ListView 显示网络歌曲列表 参考资料 本文最开始看的一个国人的文章,没有源代码,根据文中提供的源代码,自己新建的项目(最可气的是,没有图标图片资源,只能自己乱编),但程序不是很稳定,有时能显示出列表中的缩略图,有时显示不出来,还在主线程访问了网络.后看文章评论,作者给出英文原文链接,本来想这下没事了吧,结果下载源代码运行后,还是有问题~仔细看英文原文,原来他也是根据 Github 上一个项目的基础上搞的,只是添加了式样,以及显示完整的歌曲列表,包括歌

android菜鸟学习笔记25----与服务器端交互(二)解析服务端返回的json数据及使用一个开源组件请求服务端数据

补充:关于PHP服务端可能出现的问题: 如果你刚好也像我一样,用php实现的服务端程序,采用的是apache服务器,那么虚拟主机的配置可能会影响到android应用的调试!! 在android应用中访问的IP都是10.0.2.2,如果在apache虚拟主机配置文件中配置了多个虚拟主机,那么将默认解析为对第一个虚拟主机的请求,所以,在调试android应用时,应该将对应的服务端所配置的那个虚拟主机放在配置文件中的第一个虚拟主机的位置.否则就会出现请求的文件不存在等的错误. 服务端返回JSON数据及

直接使用Sublime Text实现:HTTP访问URL+格式化返回的JSON字符串

背景:作为一个Android app开发者,经常遇到如下场景:后台服务端给了一个接口URL,返回的数据类型是JSON,而我们要预先看一下这个接口返回的JSON数据.常规的查看方式则是,通过浏览器打开URL,然后借助一些Json查看工具,例如Chrome+JSONView.而这种方式总是有点low,现在我们可以仅仅通过一个文本编辑起来实现这个过程:Sublime Text.该文章仅在Windows中测试,Mac和Linux用户请自行根据系统进行微调. 首先,我们需要在Sublime Text上安装

Android访问WCF服务(使用json实现参数传递)

经过多日努力, 终于勉强弄明白了Android访问WCF服务的方法. 服务端实现 一, 实现服务. 操作契约 [csharp] view plaincopy [ServiceContract] public interface IService { [OperationContract] [WebInvoke( BodyStyle = WebMessageBodyStyle.WrappedRequest, ResponseFormat = WebMessageFormat.Json, Reque

Android_(控件)使用ListView显示Android系统中SD卡的文件列表_02

使用ListView显示Android SD卡中的文件列表 父类布局activity_main.xml,子类布局item_filelayout(一个文件的单独存放) 运行截图: 程序结构 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="

Android_(控件)使用ListView显示Android系统中联系人信息

使用ListView显示手机中联系人的姓名和电话号码 父类布局activity_main.xml,子类布局line.xml(一个文件的单独存放) 运行截图: (避免泄露信息对部分地方进行了涂鸦O(∩_∩)O!) 程序结构 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android&quo

.Net程序员玩转Android开发---(12)ListView显示数据

Android中显示数据有多种控件,这节我们来认识下ListView,ListView是Android中最常用的数据显示控件,可以显示简单数据源,也可以显示复杂数据源,我们在Android系统中常看到的列表项,基本都是ListView的功劳.ListView中显示数据,肯定要绑定数据源.数据源的绑定是通过Adapter来完成的,Android中有两种常用的适配器,ArrayAdapter(数组适配器)  SimpleAdapter(简单适配器),适配器的作用就是把复杂的数据源显示到istview