为什么java.lang.String无法在android中转换为JSONObject

时间:2016-12-26 12:21:02

标签: android json android-asynctask

我正在处理登录页面和服务器接收的数据。用户输入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

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

你得到一个json响应,但它的格式为无效,它是一个字符串值

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

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

var configuration = new Configuration();
var migrator = new DbMigrator(configuration);
//Update database to latest migration
migrator.Update();

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

{
    "status": "user exists"
}

我们使用密钥捕获字符串,现在您没有任何密钥。您只有一个String值。因此没有必要将该值传递给JSONObject jsonResponse = new JSONObject(result); String status = jsonResponse .getString("status");

因此您可以执行此操作或从返回该响应的开发人员那里寻求更好的响应;

JSONObject