首页 > 解决方案 > 从 PostData 的 JSONObject 获取 JSONArray 时出错

问题描述

我对 jsonobject 有疑问。

此代码发布data到登录 api 并获取json对象。然后将 settex 设置为 secondactivity。当我将代码更改为仅getdata作为json对象时,我成功地收到了 success 及其值,但是id, name, rol, username, name, 等...没有收到。

我发布数据并接收json对象为:

    {
        "user": {
            "id": 9,
            "name": "CCC",
            "role": null,
            "username": "CCC",
            "email": null,
            "email_verified_at": null,
            "created_at": "2021-02-23T12:29:17.000000Z",
            "updated_at": "2021-02-23T12:29:46.000000Z"
        },
        "success": true
    }

还有我MainActivity的是:

   
    public class MainActivity extends AppCompatActivity {

        private String URLline = "https://example.com/api/login/";

        private EditText etUname, etPass;
        private Button btn;
        public static String namesecond, usernamesecond;

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

            etUname = findViewById(R.id.etusername);
            etPass = findViewById(R.id.etpassword);
            btn = findViewById(R.id.btn);

            btn.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    loginUser();
                }
            });

        }

        private void loginUser(){

            final String username = etUname.getText().toString().trim();
            final String password = etPass.getText().toString().trim();

            StringRequest stringRequest = new StringRequest(Request.Method.POST, URLline,
                    new Response.Listener<String>() {
                        @Override
                        public void onResponse(String response) {
                            Toast.makeText(MainActivity.this,response,Toast.LENGTH_LONG).show();
                            parseData(response);

                        }
                    },
                    new Response.ErrorListener() {
                        @Override
                        public void onErrorResponse(VolleyError error) {
                            Toast.makeText(MainActivity.this,error.toString(),Toast.LENGTH_LONG).show();
                        }
                    }){
                @Override
                protected Map<String,String> getParams(){
                    Map<String,String> params = new HashMap<String, String>();
                    params.put("username",username);
                    params.put("password",password);

                    return params;
                }

            };

            RequestQueue requestQueue = Volley.newRequestQueue(this);
            requestQueue.add(stringRequest);
        }

        public void parseData(String response) {

            try {
                JSONObject jsonObject = new JSONObject(response);
                if (jsonObject.getString("success").equals("true")) {
                    JSONArray dataArray = jsonObject.getJSONArray("user");
                    for (int i = 0; i < dataArray.length(); i++) {

                        JSONObject dataobj = dataArray.getJSONObject(i);
                        usernamesecond = dataobj.getString("name"); // this is static name on the second activity
                        namesecond = dataobj.getString("username");// this is static name on the second activity
                    }

                    Intent intent = new Intent(MainActivity.this,SecondActivity.class);
                    startActivity(intent);
                }
            } catch (JSONException e) {
                e.printStackTrace();
            }

        }

    }

控制台运行错误是:

    W/System.err: org.json.JSONException: Value {"id":9,"name":"CCC","role":null,"username":"CCC","email":null,"email_verified_at":null,"created_at":"2021-02-23T12:29:17.000000Z","updated_at":"2021-02-23T12:29:46.000000Z"} at user of type org.json.JSONObject cannot be converted to JSONArray
    W/System.err:     at org.json.JSON.typeMismatch(JSON.java:101)

我认为json数据有一个数组,我没有得到id, name, rol, username, 等等...

请帮我解决这个问题。谢谢你。

标签: arraysjson

解决方案


我解决了我的问题并在这里编写了真正的编码:

try {
        JSONObject jsonObject = new JSONObject(response);
        if (jsonObject.getString("success").equals("true")) {
            JSONObject jsonObjectUser= jsonObject.getJSONObject("user");
            Iterator x = jsonObjectUser.keys();
            JSONArray jsonArray = new JSONArray();
            while (x.hasNext()){
                String key = (String) x.next();
                jsonArray.put(jsonObjectUser.get(key));
            }

            usernamesecond = dataobj.getString("name"); // this is static name on the second activity
                namesecond = dataobj.getString("username");// this is static name on the second activity

            }

            Intent intent = new Intent(MainActivity.this,HobbyActivity.class);
            startActivity(intent);
        }
    } catch (JSONException e) {
        e.printStackTrace();
    }

代替

try {
        JSONObject jsonObject = new JSONObject(response);
        if (jsonObject.getString("success").equals("true")) {
            JSONArray dataArray = jsonObject.getJSONArray("user");
            for (int i = 0; i < dataArray.length(); i++) {

                JSONObject dataobj = dataArray.getJSONObject(i);
                usernamesecond = dataobj.getString("name"); // this is static name on the second activity
                namesecond = dataobj.getString("username");// this is static name on the second activity
            }

            Intent intent = new Intent(MainActivity.this,SecondActivity.class);
            startActivity(intent);
        }
    } catch (JSONException e) {
        e.printStackTrace();

推荐阅读