Android org.json.JSONException:id没有值

Android org.json.JSONException:id没有值,android,Android,我知道这里有几个问题都有相同的主题和错误,但没有一个问题和我的问题相同,所以我决定把我的问题贴在这里,希望有人能帮我指出原因。代码如下: StringRequest stringRequest = new StringRequest(Request.Method.POST, Constants.URL_LOGIN, new Response.Listener<String>() { @Override public void

我知道这里有几个问题都有相同的主题和错误,但没有一个问题和我的问题相同,所以我决定把我的问题贴在这里,希望有人能帮我指出原因。代码如下:

  StringRequest stringRequest = new StringRequest(Request.Method.POST,
       Constants.URL_LOGIN,
       new Response.Listener<String>() {
       @Override
       public void onResponse(String response) {
       progressDialog.dismiss();
       try {
      JSONObject jsonObject = new JSONObject(response);
       if (!jsonObject.getBoolean("status")) {
    SharedPrefManager.getInstance(getApplicationContext())
     .userLogin(
     jsonObject.getInt("id"),
     jsonObject.getString("username"),
     jsonObject.getString("email")
     );
    //                                startActivity(new Intent(getApplicationContext(),UserActivity.class));
                                    Toast.makeText(MainActivity.this, "User Login successful", Toast.LENGTH_SHORT).show();
                                } else {
                                    Toast.makeText(MainActivity.this, jsonObject.getString("message"), Toast.LENGTH_SHORT).show();
                                }
                            } catch (JSONException e) {
                                e.printStackTrace();
                            }
                        }
                    }, 

记录jsonObject,它可能会获取“数据”数组,您需要访问该数组才能获取“id”值id的值
用户名
电子邮件
被放入
数据
对象中。数据包含一个对象数组。因此,您需要从数据数组中获取
jsonObject
,然后您可以找到
id
username
email
的值

试试这个

JSONObject jsonObject = new JSONObject(response);
JSONArray dataArr = jsonObject.getJSONArray("data")
JSONObject dataObject = dataArr.getJSONObject(0)

   if (jsonObject.getBoolean("status")) {
      SharedPrefManager.getInstance(getApplicationContext())
      .userLogin(
       dataObject.getString("id"),
       dataObject.getString("username"),
       dataObject.getString("email")
   );
   ...
}
更新您在此问题中提供的全部代码。整个代码应该是这样的

StringRequest stringRequest = new StringRequest(Request.Method.POST,
   Constants.URL_LOGIN,
   new Response.Listener<String>() {
   @Override
   public void onResponse(String response) {
     progressDialog.dismiss();
   try {
       JSONObject jsonObject = new JSONObject(response);

   if (jsonObject.getBoolean("status")) {
       JSONArray dataArr = jsonObject.getJSONArray("data")
       JSONObject dataObject = dataArr.getJSONObject(0)
       SharedPrefManager.getInstance(getApplicationContext())
                        .userLogin(
                         dataObject.getString("id"),
                         dataObject.getString("username"),
                         dataObject.getString("email")
                        );
 //   startActivity(new Intent(getApplicationContext(),UserActivity.class));
      Toast.makeText(MainActivity.this, "User Login successful", Toast.LENGTH_SHORT).show();
     } else {
          Toast.makeText(MainActivity.this, jsonObject.getString("message"), Toast.LENGTH_SHORT).show();
           }
      } catch (JSONException e) {
              e.printStackTrace();
         }
      }
  }
StringRequest StringRequest=新的StringRequest(Request.Method.POST,
Constants.URL\u登录,
新的Response.Listener(){
@凌驾
公共void onResponse(字符串响应){
progressDialog.disclose();
试一试{
JSONObject JSONObject=新JSONObject(响应);
if(jsonObject.getBoolean(“状态”)){
JSONArray dataArr=jsonObject.getJSONArray(“数据”)
JSONObject dataObject=dataArr.getJSONObject(0)
SharedPrefManager.getInstance(getApplicationContext())
.userLogin(
dataObject.getString(“id”),
dataObject.getString(“用户名”),
dataObject.getString(“电子邮件”)
);
//startActivity(新意图(getApplicationContext(),UserActivity.class));
Toast.makeText(MainActivity.this,“用户登录成功”,Toast.LENGTH_SHORT.show();
}否则{
Toast.makeText(MainActivity.this,jsonObject.getString(“消息”),Toast.LENGTH_SHORT.show();
}
}捕获(JSONException e){
e、 printStackTrace();
}
}
}
//执行0的原因,因为只有对象可用

JSONObject dataObject = array.getJSONObject(0)

 dataObject.getInt("id")
 dataObject.getString("username"),
 dataObject.getString("email")

为什么不使用改型呢?这很简单,我会使用它,但首先我想使用它。对于这种情况,如果(!jsonObject.getBoolean(“status”))和您的json,您将无法获得任何数据,我将如何实现此log.d(“jsonObject”,jsonObject)那么接下来呢?这不是我问题的解决方案这是答案,但是@Manoj Mohanty已经解决了它,因为您必须先获取数据Json数组,然后才能从iti访问id密钥。我没有获取什么是
j.getJSONArray(“数据”)
我在JJ上出错当我使用write credential登录时,我得到了php api中的成功消息,但使用错误的凭据,我什么也没有得到,除了这个
org.json.JSONException:id没有值
对于错误的凭据,你不应该在jsonObject中获得id的值。这没有问题。请检查status的值。如果状态为true,那么您就有id值。但是当我将toast替换为意图在profileActivity上发送用户时,错误弹出为
org.json.JSONException:id没有值
startActivity(新意图(getApplicationContext(),UserActivity.class))
line但当我取消注释它时,我会收到相同的错误消息,当我输入错误的电子邮件或密码时,我甚至不会收到“无效用户名或密码!”的祝酒词。但是当我输入写电子邮件时,我收到了祝酒词,密码j是jsonObject-->jsonObject jsonObject=new jsonObject(响应);
JSONArray array = j.getJSONArray("data");
JSONObject dataObject = array.getJSONObject(0)

 dataObject.getInt("id")
 dataObject.getString("username"),
 dataObject.getString("email")