JSON数据解析
Android里面一个很重要的方面就是接受后端接口数据,解析JSON字符串。已经解析数据了,那么依赖和网络权限应该都已经开了,我们直入主题。没有去单独写接口,下面我们以okhttp的同步请求进行讲解。写完了想了想还是把依赖和权限操作加在后面
activity_main
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <TextView android:id="@+id/tv" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="这是一个TextView"/> <Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="getSync" android:text="get同步请求" /> </LinearLayout>
import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import android.util.JsonReader; import android.util.Log; import android.view.View; import android.widget.TextView; import org.jetbrains.annotations.NotNull; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import java.io.IOException; import okhttp3.Call; import okhttp3.Callback; import okhttp3.FormBody; import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.Response; import okhttp3.ResponseBody; public class MainActivity extends AppCompatActivity { private static final String TAG = "MainActivity"; private OkHttpClient okHttpClient; private TextView mTv; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mTv = findViewById(R.id.tv); okHttpClient = new OkHttpClient(); } // todo 同步请求 public void getSync(View view) { new Thread() { @Override public void run() { // todo https://www.httpbin.org/get?a=1&b=2 Request request = new Request.Builder().url("https://www.wanandroid.com/banner/json").get().build(); //准备好请求的call对象 Call call = okHttpClient.newCall(request); try { Response response = call.execute(); ResponseBody sdata = response.body(); Log.e(TAG, "getSync: " + sdata); } catch (IOException e) { e.printStackTrace(); } } }.start(); } }
如果照常操作你会发现出现的都是类似于对象的玩意,根本不是自己想要的。不要慌,我们string()
一下就可以 了,如下图所示。只需要在response.body()后面加一个string()即可,
其他代码都不用变,去试试吧
下面再来个更酷的,把解析过的JSON数据取出来。取出指定数据。
Android 提取Json中指定数据
依赖配置
最后同步的时候会把需要的东西自己在仓库下载,有时候网络不好可能下载同步失败。
依赖
implementation('com.squareup.okhttp3:okhttp:4.9.0')
现在应该已经到了4.14.X
网络权限
<uses-permission android:name="android.permission.INTERNET" />
在加入完成之后最后也同步一下。Sync Now。
最后送上镇宅之宝,JSON常用解析方式