简介
今天就是除夕了, 在这里先给大家拜个年祝大家新年快乐! 通常情况下, 每个需要网络访问的应用程序都会有一个自己的服务器, 可以向服务器提交数据, 也可以从服务器上获取数据那么这些数据是什么呢? 最常用的格式有两种: XML 和 JSON 下面的示例演示了如何获取然后解析这些数据
使用 Okhttp
在以下代码中我选用的为 Okhttp 的库它是一个网络通信库, 具体可以在 https://github.com/square/okhttp 此查看添加依赖编辑 app/build.grade 文件, 在 dependencies 闭包中添加
implementation 'com.squareup.okhttp3:okhttp:3.9.1'
解析 JSON 格式数据
比起 XML,JSON 的主要优势在于它的体积更小, 在网络中传输的时候可以更省流量但缺点在于, 它的语义性较差, 看起来不如 XML 直观
下面为示例即将解析的 JSON 数据
- [{"id":"5","version":"5.5","name":"Clash of Clans"},
- {"id":"6","version":"7.0","name":"Bomm beach"},
- {"id":"7","version":"3.5","name":"Clans Royale"}]
使用 JSONObject
类似地, 解析 JSON 的数据有很多种, 在这里使用的是官方的 JSONObject 其他还有谷歌开源的 GSONJacksonFastJSON 等等
Android 代码
此代码在使用之前需要添加 Okhttp
- public class MainActivity extends AppCompatActivity implements View.OnClickListener {
- TextView responseText;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- Button sendRequest = (Button) findViewById(R.id.send_request);
- responseText = (TextView) findViewById(R.id.response_text);
- sendRequest.setOnClickListener(this);
- }
- @Override
- public void onClick(View v) {
i 删除我 f (v.getId() == R.id.send_request) {
- sendRequestWithOkHttp();
- }
- }
- private void sendRequestWithOkHttp(){
- new Thread(new Runnable() {
- @Override
- public void run() {
- try {
- OkHttpClient client = new OkHttpClient();
- Request request = new Request.Builder()
- .url("https://ice.bingyishow.top/get_data.json")
- .build();
Response response = client.newCall(request).e 删除我 xecute();
- String responseData = response.body().string();
- parseJSONWithJSONObject(responseData);
- }catch (Exception e){
- e.printStackTrace();
- }
- }
- }).start();
- }
- private void parseJSONWithJSONObject(String jsonData){
- try{
- JSONArray jsonArray = new JSONArray(jsonData);
- for (int i=0; i< jsonArray.le 删除我 ngth(); i++){
- JSONObject jsonObject = jsonArray.getJSONObject(i);
- String id = jsonObject.getString("id");
- String name = jsonObject.getString("name");
- String version = jsonObject.getString("version");
- Log.d("MainActivity","id is" + id);
- Log.d("MainActivity","name is" + name);
- Log.d("MainActivity","version is" + version);
- }
- }catch (Exception e){
- e.printStackTrace();
- }
- }
- }
解析结果
使用 GSON
如果你认为使用 JSONObject 来解析 JSON 数据已经非常简单, 那么用 GSON 来解析数据可以简单到让你不敢想象
同样使用它需要添加 GSON 依赖库 https://github.com/google/gson 送上链接使用添加
compile 'com.google.code.gson:gson:2.8.2'
首先添加一个 app 类
- public class App {
- private String id;
- private String name;
- private String version;
- public String getId(){
- return id;
- }
- public void setId(String id){
- this.id=id;
- }
- public String getName(){
- return name;
- }
- public void setName(String name){
- this.name=name;
- }
- public String getVersion(){
- return version;
- }
- public void setVersion(String version){
- this.version = version;
- }
- }
然后只需修改 MainActivity 中的代码将
parseJSONWithJSONObject(responseData);
改为
parseJSONWithGSON(responseData);
将原
parseJSONWithJSONObject
类改为
- private void parseJSONWithGSON(String jsonData){
- Gson gson = new Gson();
- List<App> appList = gson.fromJson(jsonData,new TypeToken<List<App>>(){}.getType());
- for (App app : appList){
- Log.d("MainActivity","id is" + app.getId());
- Log.d("MainActivity","name is"+ app.getName());
- Log.d("MainActivity","version is" + app.getVersion());
- }
- }
解析结果
成功的话结果是一样的
结语
如此 JSON 数据我们已经解析完成那么还有一种 XML 呢? 其实对比 JSON 来说 XML 解析大同小异时间所限无法详细介绍自己所学示例如果有需要的就请自行百度吧!
来源: https://bingyishow.top/Android-studio/73.html