如何在JsonReader帮助下解析Android上的嵌套JSON?

问题描述 投票:0回答:1

这是我第一次使用Android,我需要解析从API嵌套的JSON。在下面的示例中,我成功解析了一个JSON对象,值“ title”为https://jsonplaceholder.typicode.com/posts/1。如何更改代码以遍历循环中的所有JSON对象并从中提取“标题”-https://jsonplaceholder.typicode.com/posts/

P.S。如果可能,我不想使用新的Maven / Gradle依赖项。

package org.newwheel.app;

import android.os.AsyncTask;
import android.os.Build;
import android.os.Bundle;
import android.util.JsonReader;
import android.widget.ArrayAdapter;
import android.widget.ListView;

import androidx.annotation.RequiresApi;
import androidx.appcompat.app.AppCompatActivity;

import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.List;

import javax.net.ssl.HttpsURLConnection;


public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        new RequestAsync().execute();
    }
    public class RequestAsync extends AsyncTask<String,String,List<String>> {

        @RequiresApi(api = Build.VERSION_CODES.KITKAT)
        @Override
        protected List<String> doInBackground(String... strings) {

            List<String> projectList = new ArrayList<>();

            try {
                // Create URL
                URL newWheelEndpoint = new URL("https://jsonplaceholder.typicode.com/posts/1");
                // Create connection
                HttpsURLConnection myConnection = (HttpsURLConnection) newWheelEndpoint.openConnection();

                if (myConnection.getResponseCode() == 200) {
                    InputStream responseBody = myConnection.getInputStream();
                    InputStreamReader responseBodyReader = new InputStreamReader(responseBody, StandardCharsets.UTF_8);
                    JsonReader jsonReader = new JsonReader(responseBodyReader);
                        jsonReader.beginObject(); // Start processing the JSON object
                        while (jsonReader.hasNext()) { // Loop through all keys
                            String key = jsonReader.nextName(); // Fetch the next key
                            if (key.equals("title")) { // Check if desired key
                                // Fetch the value as a String
                                String value = jsonReader.nextString();

                                // Do something with the value
                                // ...
                                projectList.add(value);
                                break; // Break out of the loop
                            } else {
                                jsonReader.skipValue(); // Skip values of other keys
                            }

                        }
                    jsonReader.close();
                    myConnection.disconnect();
                } else {
                    // Error handling code goes here
                }
            } catch (IOException e) {
                e.printStackTrace();
            }

            return projectList;
        }

        @Override
        protected void onPostExecute(List<String> list) {
            if(list!=null){
                String[] array = list.toArray(new String[0]);

                // Get element ListView
                ListView countriesList = (ListView) findViewById(R.id.countriesList);

                // Create adapter
                ArrayAdapter<String> adapter = new ArrayAdapter(MainActivity.this,
                        android.R.layout.simple_list_item_1, array);

                // Install for list adapter
                countriesList.setAdapter(adapter);
            }
        }


    }
}
java android json parsing
1个回答
0
投票

您有模型设置吗?我建议您使用REST客户端,例如翻新。

© www.soinside.com 2019 - 2024. All rights reserved.