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
2660

被折叠的 条评论
为什么被折叠?



