安卓中获取服务端json数据,使用JSONObject解析,并通过ListView显示出来

这是在浏览器中访问地址,服务器返回的json数据格式

首先创建两个布局文件

1、activity_main.xml中加入ListView控件




    

2、view_main.xml中为ListvView进行布局,这里面的六个文本就是用来显示json中的数据(依照个人需要布局啦,这个布局文件可以选择性忽略,贴出来为了后面方便看




    

        
            
            
        

        
            
            
        

        
            
            
        

        
            

 

然后在AndroidManifest.xml中添加访问网络权限:   

 

接下来就是在MainActivity中获取、解析数据了

我有使用到okHttp,所以需要先导入jar包,在你的AndroidStudio中打开 File下的ProjectStructure

 

直接输入okHttp搜索

 

import android.annotation.SuppressLint;
import android.content.Context;
import android.os.Handler;
import android.os.Message;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.TextView;

import org.json.JSONArray;
import org.json.JSONObject;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    public ListView lv;
    public ArrayList> list = new ArrayList>();
    private Context context;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        init();
    }

    private Mybaseadapter list_item;

    private void init() {
        list.clear();
        lv = (ListView) findViewById(R.id.lv_contact);
        list_item = new Mybaseadapter();
        lv.setAdapter(list_item);

        new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    OkHttpClient client = new OkHttpClient();
                    //服务端访问地址
                    Request request = new Request
                            .Builder()
                            .url("http://120.36.153.174:9080/CargolistApi/select").build();
                    Response response = client.newCall(request).execute();
                    //得到服务器返回的数据后,调用parseJSONWithJSONObject进行解析
                    String responseData = response.body().string();
                    parseJSONWithJSONObject(responseData);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }).start();
    }

    private void parseJSONWithJSONObject(String jsonData) {
        if (jsonData != null) {
            try {
                JSONObject jsonObject = new JSONObject(jsonData);

                //获取数据中的code值,如果是0则正确
                String resultCode = jsonObject.getString("code");
                if (resultCode.equals("0")) {
                    //获取到json数据中里的data内容
                    JSONArray resultJsonArray = jsonObject.getJSONArray("data");
                    Log.d("MainActivity", "data+++" + resultJsonArray);
                    for (int i = 0; i < resultJsonArray.length(); i++) {
                        //循环遍历,获取json数据中data数组里的内容
                        JSONObject Object = resultJsonArray.getJSONObject(i);
                        Map map = new HashMap();
                        try {
                            String cargono = Object.getString("cargono");
                            String variety = Object.getString("variety");
                            String markno = Object.getString("markno");
                            String spec = Object.getString("spec");
                            String kgs = Object.getString("kgs");
                            String net = Object.getString("net");
                    
                            map.put("cargono", cargono);
                            map.put("variety", variety);
                            map.put("markno", markno);
                            map.put("spec", spec);
                            map.put("kgs", kgs);
                            map.put("net", net);

                            //保存到ArrayList集合中
                            list.add(map);
                        } catch (Exception e) {
                            e.printStackTrace();
                        }
                    }

                    handler.sendEmptyMessageDelayed(1, 100);

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

    @SuppressLint("HandlerLeak")
    public Handler handler = new Handler() {

        @Override
        public void handleMessage(Message msg) {
            switch (msg.what) {
                case 1:
                    list_item.notifyDataSetChanged();
                    break;
            }
        }
    };

     
    //listview适配器
    public class Mybaseadapter extends BaseAdapter {

        @Override
        public int getCount() {
            return list.size();
        }

        @Override
        public Object getItem(int position) {
            return list.get(position);
        }

        @Override
        public long getItemId(int position) {
            return position;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {

            ViewHolder viewHolder = new ViewHolder();

            if (convertView == null) {        
                convertView = getLayoutInflater().inflate(R.layout.view_main,null);
                viewHolder.Cargono = (TextView) convertView.findViewById(R.id.tvCargono);
                viewHolder.Variety = (TextView) convertView.findViewById(R.id.tvVariety);
                viewHolder.Markno = (TextView) convertView.findViewById(R.id.tvMarkno);
                viewHolder.Spec = (TextView) convertView.findViewById(R.id.tvSpec);
                viewHolder.Kgs = (TextView) convertView.findViewById(R.id.tvKgs);
                viewHolder.Net = (TextView) convertView.findViewById(R.id.tvNet);

                convertView.setTag(viewHolder);

            } else {
                viewHolder = (ViewHolder) convertView.getTag();
            }

            viewHolder.Cargono.setText("钢卷号:"+list.get(position).get("cargono").toString());
            viewHolder.Variety.setText("品种:"+list.get(position).get("variety").toString());
            viewHolder.Markno.setText("牌号:"+list.get(position).get("markno").toString());
            viewHolder.Spec.setText("规格型号:"+list.get(position).get("spec").toString());
            viewHolder.Kgs.setText("毛重:"+list.get(position).get("kgs").toString());
            viewHolder.Net.setText("净重:"+list.get(position).get("net").toString());

            return convertView;
        }
    }

    final static class ViewHolder {
        TextView Cargono;
        TextView Variety;
        TextView Markno;
        TextView Spec;
        TextView Kgs;
        TextView Net;
    }

    @Override
    public void onClick(View view) {

    }
}

 

运行成功的效果图

(遇到问题果然还是论坛提问更有效,感谢评论帮我修改错误的好心人)

 

解析JSON数据还有一种方法是使用谷歌提供的GSON开源库来进行,

GSON库可以将一段JSON格式的字符串自动映射成为一个对象,不需要再手动编写代码进行解析。

 

你可能感兴趣的:(Android,JSONObject)