JSONArray не может быть преобразован в JSONObject в Android - PullRequest
0 голосов
/ 31 марта 2020

Мое Android приложение отправляет запрос в REST API для аутентификации пользователя. Сервер вернет истину с этим запросом. Но в моем приложении работает onErrorResponse() без onResponse(). И ошибка, которую я напечатал:

com.android.volley.ParseError: org.json.JSONException: Value [{"id":1,"username":"vuthehuyht","full_name":"Vũ Thế Huy","phone_number":"0972809817","password":"hoanglan"}] of type org.json.JSONArray cannot be converted to JSONObject

authenticateUser function

final RequestQueue requestQueue = Volley.newRequestQueue(getApplicationContext());

        JSONObject jsonObject = new JSONObject();
        try {
            jsonObject.put("phone_number", phoneNumber);
            jsonObject.put("password", password);
        } catch (JSONException e) {
            e.printStackTrace();
        }

        JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.POST, "http://192.168.53.100:3001/user/auth", jsonObject, new Response.Listener<JSONObject>() {
            @Override
            public void onResponse(JSONObject response) {
                loadingBar.dismiss();
                Toast.makeText(LoginActivity.this, "Login successfully", Toast.LENGTH_SHORT).show();
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                loadingBar.dismiss();
                Toast.makeText(LoginActivity.this, "Error", Toast.LENGTH_SHORT).show();
                System.out.println(error.toString());
            }
        });
        requestQueue.add(jsonObjectRequest);

user.controller. js

exports.auth = (req, res) => {
    const phone_number = req.body.phone_number;
    const password = req.body.password;

    User.findAll({
        where: {
            phone_number: phone_number,
            password: password
        }
    })
        .then(data => {
            res.send(data);
            res.end();
        })
        .catch(err => {
            res.status(500).send({
                message: err.message | "Could not found user!"
            });
            res.end();
        })
};

Как можно Я это исправлю?

Ответы [ 2 ]

1 голос
/ 31 марта 2020

Просто измените запрос обратного вызова Volley onResponse, чтобы он принимал JSONArray в качестве ответа вместо JSONObject, потому что это тип ответа, который вы получаете с вашего сервера:

@Override
public void onResponse(JSONArray response) {
     loadingBar.dismiss();
     Toast.makeText(LoginActivity.this, "Login successfully", Toast.LENGTH_SHORT).show();
}
0 голосов
/ 31 марта 2020

если это ваш ответ

[ 
  {
    "id":1,
    "username":"vuthehuyht",
    "full_name":"Vũ Thế Huy",
    "phone_number":"0972809817",
    "password":"hoanglan"
  }
]

вам может потребоваться начать с JSONArray LIKE

Попробуйте этот метод

RequestQueue requestQueue = Volley.newRequestQueue(getApplicationContext());

StringRequest stringRequest = new StringRequest(Request.Method.POST, "Url", new Response.Listener<String>() {
            @Override
            public void onResponse(String response) {
                String Error = "";
                try {
                     JSONArray jsonArray= new JSONArray();
                    for (int i = 0; i<jsonArray.length();i++){
                        JSONObject job = jsonArray.getJSONObject(i);

                      //So and So
                        progressDialog.dismiss();
                    }

                } catch (JSONException e) {
                    progressDialog.dismiss();
                    Toast.makeText(MainActivity.this, "Something went wrong", Toast.LENGTH_SHORT).show();
                    e.printStackTrace();
                }
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                progressDialog.dismiss();
                Toast.makeText(MainActivity.this, "Something went wrong", Toast.LENGTH_SHORT).show();
            }
        });


requestQueue.add(stringRequest);

...