JSONException:没有错误值

时间:2015-11-22 20:06:05

标签: java android android-volley

我收到以下错误:

JSONException: No value for error

在我的日志中(链接以查看我的日志的屏幕截图:http://i.imgur.com/4J66ub4.png)在Android Studio中它说原因是因为这行代码:

boolean error = jObj.getBoolean("error");

原因还在于这行代码:

AppConfig.URL_LOGIN, new Response.Listener<String>() {

当我将请求发送到我的服务器时(以便我可以登录我的应用程序)。我可以看到它取得了成功。我在服务器上记录了它是输出:

output user
{ _id: 5650e78597f6e98413a737d4,
  name: 'b',
  email: 'b@hotmail.com',
  hashed_password: 'r+rDSXpJtFl7rXzUNyNbhAwgBSNq5uk2khARiyHyqUzTNF8dkXbUhRhErvMfsUMpUxg89zFWw57uOlI7O006aw==',
  salt: 'gzoxOSNZkTvOHyl9xzKZAg==',
  username: 'b',
  __v: 0,
  provider: 'local',
  roles: [ 'authenticated' ] }
end output user
POST /api/login 200 355 - 54.181 ms

另一方面,来自服务器的响应看起来不同。我在我的应用程序上记录了它是输出:

11-22 19:34:30.374 3668-3668/? I/System.out: output response
11-22 19:34:30.375 3668-3668/? I/System.out: {"token":"eyJhbGciOiJIUzI1NiJ9.JTdCJTIyX2lkJTIyOiUyMjU2NTBlNzg1OTdmNmU5ODQxM2E3MzdkNCUyMiwlMjJuYW1lJTIyOiUyMmIlMjIsJTIyZW1haWwlMjI6JTIyYkBob3RtYWlsLmNvbSUyMiwlMjJ1c2VybmFtZSUyMjolMjJiJTIyLCUyMl9fdiUyMjowLCUyMnByb3ZpZGVyJTIyOiUyMmxvY2FsJTIyLCUyMnJvbGVzJTIyOiU1QiUyMmF1dGhlbnRpY2F0ZWQlMjIlNUQlN0Q.eXM6a4dUMDMv2feQpzbgi0q355jbINXI5ErlP_jKNk0","redirect":"/"}
11-22 19:34:30.375 3668-3668/? I/System.out: end output response

我通过链接发布我的方法,因为该方法太大而无法在此处发布。在下面的链接中,您可以看到我的方法:

http://pastebin.com/ix9YpkKa

1 个答案:

答案 0 :(得分:3)

正如错误清楚地说明的那样,

JSONException: No value for error

这意味着它无法找到error密钥。在您的代码中,

                System.out.println("output response");
                System.out.println(response);
                System.out.println("end output response");
                JSONObject jObj = new JSONObject(response);
                boolean error = jObj.getBoolean("error");

您从服务器获得的响应

{"token":"eyJhbGciOiJIUzI1NiJ9.JTdCJTIyX2lkJTIyOiUyMjU2NTBlNzg1OTdmNmU5ODQxM2E3MzdkNCUyMiwlMjJuYW1lJTIyOiUyMmIlMjIsJTIyZW1haWwlMjI6JTIyYkBob3RtYWlsLmNvbSUyMiwlMjJ1c2VybmFtZSUyMjolMjJiJTIyLCUyMl9fdiUyMjowLCUyMnByb3ZpZGVyJTIyOiUyMmxvY2FsJTIyLCUyMnJvbGVzJTIyOiU1QiUyMmF1dGhlbnRpY2F0ZWQlMjIlNUQlN0Q.eXM6a4dUMDMv2feQpzbgi0q355jbINXI5ErlP_jKNk0","redirect":"/"}

只有2把钥匙。一个是token,另一个是redirect。您正试图在以下行中找到error,因此崩溃。

boolean error = jObj.getBoolean("error");

要解决上述问题,您可以在获取其值之前检查JSONObject是否包含error键。它就像是

JSONObject jObj = new JSONObject(response);
if(jObj.contains("error")){
    boolean error = jObj.getBoolean("error");
}