android 解析数据之Gson

Posted 情似雨餘黏地絮

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了android 解析数据之Gson相关的知识,希望对你有一定的参考价值。

1、套路开始:先在android studio的setting中加入GsonFormat的插件

2、选好你要加载的Json数据

3、进入你需要加载的Json界面,将数据复制,并创建一个类

我这里创建的类名叫TvInfo(你可以根据实际情况取名),进入后(alt+s)GsonFormat快捷键,把你复制的数据粘贴到框内并自动生成代码即可

TvInfo

package com.chuanxidemo.shaoxin.demo09;

/**
 * Created by shaoxin on 2017/2/25.
 */

public class TvInfo {

    /**
     * lon : 120.58531
     * level : 2
     * address :
     * cityName :
     * alevel : 4
     * lat : 31.29888
     */

    private double lon;
    private int level;
    private String address;
    private String cityName;
    private int alevel;
    private double lat;

    public double getLon() {
        return lon;
    }

    public void setLon(double lon) {
        this.lon = lon;
    }

    public int getLevel() {
        return level;
    }

    public void setLevel(int level) {
        this.level = level;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    public String getCityName() {
        return cityName;
    }

    public void setCityName(String cityName) {
        this.cityName = cityName;
    }

    public int getAlevel() {
        return alevel;
    }

    public void setAlevel(int alevel) {
        this.alevel = alevel;
    }

    public double getLat() {
        return lat;
    }

    public void setLat(double lat) {
        this.lat = lat;
    }

    @Override
    public String toString() {
        return "TvInfo{" +
                "lon=" + lon +
                ", level=" + level +
                ", address=‘" + address + ‘\‘‘ +
                ", cityName=‘" + cityName + ‘\‘‘ +
                ", alevel=" + alevel +
                ", lat=" + lat +
                ‘}‘;
    }
}

4、创建Gson解析数据的基类

GsonUtil

package com.chuanxidemo.shaoxin.demo09;

import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;

/**
 * Created by shaoxin on 2017/2/25.
 */

public class GsonUtil {
    public static BufferedReader bufferedReader;
    public static StringBuffer stringBuffer;

    // 将Json数据解析成相应的映射对象
    public static <T> T parseJsonWithGson(String jsonData, Class<T> type) {
        Gson goson = new Gson();
        T result = goson.fromJson(jsonData, type);
        return result;
    }

    // 将Json数组解析成相应的映射对象列表
    public static <T> List<T> parseJsonArrayWithGson(String jsonData,  Class<T> cls) {
        Gson gson = new Gson();
        List<T> result = new ArrayList<>();
        result = gson.fromJson(jsonData, new TypeToken<List<T>>() {
        }.getType());
        return result;
    }


    // 根据json数据地址获取数据
    public static String getData(String jsonURL) {
        try {
            stringBuffer = new StringBuffer();
            URL url = new URL(jsonURL);//json地址
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            connection.setRequestMethod("GET");//使用get方法接收
            InputStream inputStream = connection.getInputStream();//得到一个输入流
            bufferedReader = new BufferedReader(new InputStreamReader(inputStream, "UTf-8"));
            String sread = null;
            while ((sread = bufferedReader.readLine()) != null) {
                stringBuffer.append(sread);
                stringBuffer.append("\r\n");
            }
//            Log.i("msg", "onClick: " + stringBuffer.toString());
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return stringBuffer.toString();
    }


}

MainActivity

package com.chuanxidemo.shaoxin.demo09;

import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {
    GsonUtil gsonUtil;
    private TextView txt;
    private Button getData;
    TvInfo tvInfo;
    Handler handler;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        txt = (TextView) findViewById(R.id.txt);
        getData = (Button) findViewById(R.id.get_data);

        gsonUtil = new GsonUtil();
        handler = new Handler() {
            @Override
            public void handleMessage(Message msg) {
                super.handleMessage(msg);
                txt.setText(tvInfo.toString());
            }
        };
        getData.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                new Thread() {
                    @Override
                    public void run() {
                        super.run();
                        String data = gsonUtil.getData("http://gc.ditu.aliyun.com/geocoding?a=%E8%8B%8F%E5%B7%9E%E5%B8%82");//加载的Json数据网址
                        tvInfo = gsonUtil.parseJsonWithGson(data, TvInfo.class);
                        handler.sendEmptyMessage(0x123);//线程中不能直接对UI进行设计所以用Handler解决
                        Log.i("msg", "run: " + tvInfo.getLon());

                    }
                }.start();

            }
        });


    }
}

 

以上是关于android 解析数据之Gson的主要内容,如果未能解决你的问题,请参考以下文章

RecyclerView未显示已解析的GSON数据

Android :安卓第一行代码学习笔记之 解析JSON格式数据

Android之GSON的使用

Android探究之Gson@SerializedName

android之Retrofit使用

Kotlin基础从入门到进阶系列讲解(入门篇)Android之GSON的使用