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

Posted lzsin

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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>
View Code

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 }
View Code

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     }
View Code

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、界面效果

技术图片

 

以上是关于Android ListView显示访问WebServices返回的JSON结果的主要内容,如果未能解决你的问题,请参考以下文章

Android中使用RequestQueue队列访问web服务器和Listview自定义适配器制作智慧医疗界面

Android中使用RequestQueue队列访问web服务器和Listview自定义适配器制作智慧医疗界面

Android中使用RequestQueue队列访问web服务器和Listview自定义适配器制作智慧医疗界面

在 Android 上将 Web 图像转换为 ListView

Flutter web ListView.builder啥也没显示

Android ListView.setEmptyView