package com.zjw.mynetwork7; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.widget.Button; import android.widget.TextView; import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; import java.io.IOException; import java.util.List; import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.Response; //9.4.2 p331 使用GSON //把OkHttp的使用的代码拷一份过来(笔记(8)) //添加依赖compile 'com.google.code.gson:gson:2.8.0' /* GSON可以将一段JSON格式的字符串自动映射成一个对象 如: JSON数据:{"name":"Tom","age":20} Person类:name,age两个字段 解析代码:Gson gson=new Gson(); Person person=gson.fromJson(jsonDara,Person.class); 如果是解析JSON数组,需借助TypeToken将期望解析成的数据类型传入到fromJson()方法中 List<Person> people=gson.fromJson(jsonData,new TypeToken<List<Person>>(){}.getType()); */ //新增一个App类,加入id,name,version三个字段 public class GSONAnalysisOfJSON extends AppCompatActivity { private Button mBtnSendRequest; private TextView mTvResponseText; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_gsonanalysis_of_json); //找到控件 mBtnSendRequest = (Button) findViewById(R.id.btn_send_request); mTvResponseText = (TextView) findViewById(R.id.tv_response_text); //Button点击事件,发送HTTP请求 mBtnSendRequest.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //用OkHttp发送HTTP请求 sendRequestWithOkHttp(); } }); } private void sendRequestWithOkHttp() { //开启新线程做耗时操作 new Thread(new Runnable() { @Override public void run() { try { OkHttpClient client = new OkHttpClient();//创建一个OkHttpClient实例 Request request = new Request.Builder() .url("http://10.0.2.2:8080//get_data.json")//设置目标网络地址 .build();//创建一个Request对象 Response response = client.newCall(request).execute();//发送请求获取服务器返回对象 String responseData = response.body().string(); paraJSONWithGSON(responseData); } catch (IOException e) { e.printStackTrace(); } } }).start(); } private void paraJSONWithGSON(String responseData) { StringBuilder builder = new StringBuilder(); Gson gson = new Gson(); List<App> appList = gson.fromJson(responseData, new TypeToken<List<App>>() { }.getType()); for (App app : appList) { builder.append("id:" + app.getId() + "\n") .append("name:" + app.getName() + "\n") .append("version:" + app.getVersion() + "\n") .append("-----------------------------\n"); } showResponse(builder.toString()); } //将数据设置给TextView private void showResponse(final String s) { //在UI线程(主线程)更新UI,因为Android不允许在子线程中进行UI操作 runOnUiThread(new Runnable() { @Override public void run() { mTvResponseText.setText(s); } }); } }
转载于:https://my.oschina.net/u/3620480/blog/1489822