java - Android - 获取 JSONArray 问题

标签 java android json

在我的 android 应用程序中,我想从网站获取 JSON 数据。 我创建它是为了使用这种结构获取数据:

[{"id":"1","name":"a"},{"id":"2","name":"a"},{"id":"3","name":"a"},{"id":"4","name":"a"}]

它工作得很好,就像它应该的那样。现在我尝试稍微操纵代码以获取其他 JSON 数据。它具有以下结构:

{"ok":true,"license":"xx","data":"zz","status":"ok","stations":
[{"id":"474","name":"ABC","street":"MARGARETE-STR."},
{"id":"442","name":"XYZ","street":"ABCSTR"}]}

我没有得到任何结果,我认为这可能是因为应该获取的数据位于一个数组中,但我也认为我无论如何都会得到它。我是不是以错误的方式获取它?

我的代码:

public class MainActivity extends AppCompatActivity {

    List<GetDataAdapter> GetDataAdapter1;

    RecyclerView recyclerView;
    RecyclerView.LayoutManager recyclerViewlayoutManager;
    RecyclerView.Adapter recyclerViewadapter;
    ProgressBar progressBar;
    String GET_JSON_DATA_HTTP_URL = "xx.com";
    String JSON_ID = "id";
    String JSON_NAME = "name";
    String JSON_SUBJECT = "email";
    String JSON_STREET = "street";
    Button button;
    JsonArrayRequest jsonArrayRequest;
    com.android.volley.RequestQueue requestQueue;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        GetDataAdapter1 = new ArrayList<>();
        recyclerView = (RecyclerView) findViewById(R.id.recyclerView1);
        progressBar = (ProgressBar) findViewById(R.id.progressBar1);
        button = (Button) findViewById(R.id.button);
        recyclerView.setHasFixedSize(true);
        recyclerViewlayoutManager = new LinearLayoutManager(this);
        recyclerView.setLayoutManager(recyclerViewlayoutManager);

        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                progressBar.setVisibility(View.VISIBLE);
                JSON_DATA_WEB_CALL();
            }
        });
    }

    public void JSON_DATA_WEB_CALL() {

        jsonArrayRequest = new JsonArrayRequest(GET_JSON_DATA_HTTP_URL,

                new Response.Listener<JSONArray>() {
                    @Override
                    public void onResponse(JSONArray response) {

                        progressBar.setVisibility(View.GONE);
                        JSON_PARSE_DATA_AFTER_WEBCALL(response);
                    }
                },
                new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {

                    }
                });

        requestQueue = Volley.newRequestQueue(this);
        requestQueue.add(jsonArrayRequest);
    }

    public void JSON_PARSE_DATA_AFTER_WEBCALL(JSONArray array) {

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

            GetDataAdapter GetDataAdapter2 = new GetDataAdapter();

            JSONObject json = null;
            try {
                json = array.getJSONObject(i);

                GetDataAdapter2.setId(json.getInt(JSON_ID));
                GetDataAdapter2.setName(json.getString(JSON_NAME));
                GetDataAdapter2.setStreet(json.getString(JSON_STREET));

            } catch (JSONException e) {

                e.printStackTrace();
            }
            GetDataAdapter1.add(GetDataAdapter2);
        }
        recyclerViewadapter = new RecyclerViewAdapter(GetDataAdapter1, this);
        recyclerView.setAdapter(recyclerViewadapter);
    }
}

最佳答案

第二个 JSON 样本不是 JSON 数组;它是一个 JSON 对象。您应该使用 JsonObjectRequest 而不是 JsonArrayRequest 来获取此数据。

关于java - Android - 获取 JSONArray 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50843044/

相关文章:

java - 如何使用 SQLite 直接访问文件中的特定记录?在 LibGDX 中

android - 禁用汉堡包到箭头动画

ios - 如何在 Swift 3 中解析巨大的 JSON 文件?

Json 提供的类型生成不适用于 "with"

java - 使用 javax.sound.samples 库时出现异常......!

java - Graphics2D:我应该使用 int 还是 float 版本?

java - 关于序列化、serialVersionUID、类不兼容

java - Jackson 在序列化期间排除了容器(List、Map、Collection)的类型信息

java - 如何修复 Java Web 应用程序中通过发送数据泄露信息的缺陷

android - 如何在 Android 设备中获取文件 *.apk 位置