【问题标题】:Why java.lang.String cannot converted into JSONObject in android为什么java.lang.String不能在android中转换成JSONObject
【发布时间】:2016-12-26 12:21:01
【问题描述】:

我正在处理登录页面和服务器接收数据。这里的 IP、用户名和密码由用户输入。当 IP 正确时,他会检查用户名和密码。之后他会收到 JSON 消息。这里,结果保存为“用户存在”,我正在检查“用户存在”。

当我试图在JSONObject 中转换时,他给出了错误..... here is the error description

JSON 响应:“用户存在”

MainActivity.java

  private class HttpAsyncTask extends AsyncTask<String, Void, String>{
    @Override
    protected String doInBackground(String... urls) {
        return GET(urls[0]);
    }
    @Override
    protected void onPostExecute(String result) {
        try {
            JSONObject jsonResponse = new JSONObject(result);
            if(jsonResponse.equals("User exists")){
                Toast.makeText(getBaseContext(),"Login Successfully",Toast.LENGTH_LONG).show();
                Intent intent = new Intent(getApplicationContext(),Welcome.class);
                startActivity(intent);
            }
            else{
                Toast.makeText(getBaseContext(),"User does not exists",Toast.LENGTH_LONG).show();
            }
         } catch (JSONException e) {
            e.printStackTrace();
        }
    }
}

LogCat

12-27 10:53:20.662 507-572/system_process E/WifiStateMachine: [1,482,836,000,662 ms] noteScanstart no scan source uid -1
12-27 10:53:21.375 6641-6662/com.example.anew.addbtnontitlebar D/result: "User exists"
12-27 10:53:21.376 6641-6641/com.example.anew.addbtnontitlebar D/error: Value User exists of type java.lang.String cannot be converted to JSONObject
12-27 10:53:23.168 507-572/system_process E/WifiStateMachine: [1,482,836,003,168 ms] noteScanEnd no scan source onTime=0

【问题讨论】:

标签: android json android-asynctask


【解决方案1】:

您收到一个 json 响应,但它是 无效 格式,它是一个字符串值

要以有效格式识别它,您可以使用http://jsonlint.com/ 或类似的东西。只需粘贴您的回复并检查它

如果它是有效的 json 格式,它应该是这样的

{
    "status": "user exists"
}

如果您有上述回复,您可以这样做;

JSONObject jsonResponse = new JSONObject(result);
String status = jsonResponse .getString("status");

我们使用密钥捕获字符串,现在您没有任何密钥。你只有一个字符串值。所以没有必要将该值传递给JSONObject

因此您可以这样做或要求返回该响应的开发人员提供更好的响应;

@Override
    protected void onPostExecute(String result) {
        if (result!= null){
              if (result.equals("User exists")){
                      Toast.makeText(getBaseContext(),"User exists",Toast.LENGTH_LONG).show();
                     }
                   else{
                         Toast.makeText(getBaseContext(),result,Toast.LENGTH_LONG).show();
                         }
              }
    }

【讨论】:

  • 我在 URL 上的 JSON 响应被破解,这是有效的,我正在按照您的方式解决问题,但问题没有解决...... ...
  • @Himanshu Srivastava 如果您只得到类似“用户存在”的内容,则无效!!!!!!!!!!!!检查所有对其发表评论的人以及他们所说的话。检查我的有效 json 示例。
  • @Himanshu Srivastava 在这里阅读>stackoverflow.com/questions/7487869/…
  • @Himanshu Srivastava 在你的 onPostExecute 添加一个日志并打印你的结果,看看你会收到什么
  • @Himanshu Srivastava 打印你进入 onPostExcute 的结果并发布
【解决方案2】:

您可以使用键值对访问 JSON 值。所以你需要从 JSON 数据中获取一个键并与值进行比较。

JSONObject jsonResponse = new JSONObject(result); 
String jsonKey=jsonResponse.getString("result");
if(jsonKey.equeal("User exists"))
     {
       //do you stuff
    }

【讨论】:

  • No.....Error:----.org.json.JSONException: Value User exists of type java.lang.String cannot be convert to JSONObject....@Maaz Patel
猜你喜欢
  • 2017-04-24
  • 1970-01-01
  • 2017-01-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多