如何从 Android 中的数组数组中提取 JSON 数据

huangapple 未分类评论50阅读模式
英文:

How to fetch Json data from array of arrays in android

问题

例如,我有一个JSON格式的数组数组:

[
  [17,"Tracker-9210671","+918010804433",true,84,"869867039210671"],
  [18,"Gtrack_Ciaz","+918010804433",true,85,"869867039215308"],
  [20,"Gtrack_Zeep_Trunk","+918010804433",true,86,"869867039210333"],
  [19,"Gtrack_Zeep_Dashboard","+918010804433",true,87,"869867039209095"]
]

我想在我的Android应用程序中获取这个JSON数据,应该如何做呢?我无法获取这个JsonArray,有人可以告诉我应该使用什么样的代码。

我已经做了以下操作(使用Volley库):

public class MainActivity extends AppCompatActivity {

 private TextView mTextViewResult;
 private RequestQueue mQueue;

 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);

  mTextViewResult = findViewById(R.id.text_view_result);
  Button buttonParse = findViewById(R.id.button_parse);

  mQueue = Volley.newRequestQueue(this);

  buttonParse.setOnClickListener(new View.OnClickListener() {
   @Override
   public void onClick(View v) {
    jsonParse();
   }
  });
 }
 private void jsonParse() {
  String url = "url";
  JsonArrayRequest request = new JsonArrayRequest(Request.Method.GET, url, null,
   new Response.Listener<JSONArray>() {
    @Override
    public void onResponse(JSONArray response) { // 请求成功时调用。

     try {
      for (int i = 0; i < response.length(); i++) {

       JSONArray jsonArray = response.getJSONArray(i);
       for (int j = 0; j < jsonArray.length(); j++) {
        JSONArray value = jsonArray.getJSONArray(j);

        int DB_ID = value.getInt(0);
        String Devie_Name = value.getString(1);
        String Mobile_Number = value.getString(2);
        Boolean Status = value.getBoolean(3);
        int Stock_Id = value.getInt(4);
        String Device_Id = value.getString(5);
        mTextViewResult.append(String.valueOf(DB_ID) + " , " + Devie_Name + " , " + Mobile_Number + " , " + String.valueOf(Status) + " , " + String.valueOf(Stock_Id) + " , " + Device_Id + "\n\n");

       }
      }

     } catch (JSONException e) {
      e.printStackTrace();
     }

    }


   }, new Response.ErrorListener() {
    @Override
    public void onErrorResponse(VolleyError error) { // 请求不成功时调用。
     error.printStackTrace();
    }
   });

  mQueue.add(request);
 }
}

我收到的错误消息:

org.json.JSONException: Value 17 at 0 of type java.lang.Integer cannot be converted to JSONArray.
英文:

For Example i have the array of arrays of JSON format:

[
  [17,&quot;Tracker-9210671&quot;,&quot;+918010804433&quot;,true,84,&quot;869867039210671&quot;],
  [18,&quot;Gtrack_Ciaz&quot;,&quot;+918010804433&quot;,true,85,&quot;869867039215308&quot;], 
  [20,&quot;Gtrack_Zeep_Trunk&quot;,&quot;+918010804433&quot;,true,86,&quot;869867039210333&quot;], 
  [19,&quot;Gtrack_Zeep_Dashboard&quot;,&quot;+918010804433&quot;,true,87,&quot;869867039209095&quot;]
]

And i want to fetch this Json data in my android , How to get this.I am not able to Fetch this JsonArray Can anyone tell what should be the code for this.

What i have done is(Using volley):

'''

 public class MainActivity extends AppCompatActivity {

 private TextView mTextViewResult;
 private RequestQueue mQueue;

 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);

  mTextViewResult = findViewById(R.id.text_view_result);
  Button buttonParse = findViewById(R.id.button_parse);

  mQueue = Volley.newRequestQueue(this);

  buttonParse.setOnClickListener(new View.OnClickListener() {
   @Override
   public void onClick(View v) {
    jsonParse();
   }
  });
 }
 private void jsonParse() {
  String url = &quot;url&quot;;
  JsonArrayRequest request = new JsonArrayRequest(Request.Method.GET, url, null,
   new Response.Listener &lt; JSONArray &gt; () {
    @Override
    public void onResponse(JSONArray response) { // Called when request successfull.


     try {
      for (int i = 0; i &lt; response.length(); i++) {

       JSONArray jsonArray = response.getJSONArray(i);
       for (int j = 0; j &lt; jsonArray.length(); j++) {
        JSONArray value = jsonArray.getJSONArray(j);

        int DB_ID = value.getInt(0);
        String Devie_Name = value.getString(1);
        String Mobile_Number = value.getString(2);
        Boolean Status = value.getBoolean(3);
        int Stock_Id = value.getInt(4);
        String Device_Id = value.getString(5);
        mTextViewResult.append(String.valueOf(DB_ID) + &quot; , &quot; + Devie_Name + &quot; , &quot; + Mobile_Number + &quot; , &quot; + String.valueOf(Status) + &quot; , &quot; + String.valueOf(Stock_Id) + &quot; , &quot; + Device_Id + &quot;\n\n&quot;);

       }
      }

     } catch (JSONException e) {
      e.printStackTrace();
     }

    }


   }, new Response.ErrorListener() {
    @Override
    public void onErrorResponse(VolleyError error) { // called when request not success.
     error.printStackTrace();
    }
   });

  mQueue.add(request);
 }
}

'''

Error i got:

org.json.JSONException: Value 17 at 0 of type java.lang.Integer cannot be
converted to JSONArray.

答案1

得分: 0

只需将以下内容添加到您的Android Manifest文件中。因为从Android 9操作系统开始,我们需要添加此属性android:usesCleartextTraffic="true"

因为从Android 9(API级别28)开始,默认情况下禁用了明文支持。

<application
    android:usesCleartextTraffic="true">
英文:

Just add this to your Android Manifest file. Because from Android 9 OS we need to have add this property android:usesCleartextTraffic=&quot;true&quot;.

Because Starting with Android 9 (API level 28), cleartext support is disabled by default.

 &lt;application
        android:usesCleartextTraffic=&quot;true&quot;&gt;

huangapple
  • 本文由 发表于 2020年5月4日 15:05:19
  • 转载请务必保留本文链接:https://java.coder-hub.com/61586799.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定