【问题标题】:Android - JSONObject doesn't workAndroid - JSONObject 不起作用
【发布时间】:2015-08-20 14:58:36
【问题描述】:

我在 Android 上的 REST API 中使用 HttpGet 方法,但我遇到了问题。我得到了响应,但我无法创建正在检索的对象。我把我的AsyncTask放在这里:

class FindCar extends AsyncTask<Integer, Integer, Void> {

   protected void onPreExecute(){
   }

   protected Void doInBackground(Integer... idCar) {

      String name = ""; 

      String url = "http://IP of my computer/project/cars/" + idCar[0].intValue();

      HttpClient httpClient = new DefaultHttpClient();

      HttpGet method = new HttpGet(url);

      method.setHeader("content-type", "application/json");

      try {
          HttpResponse resp = httpClient.execute(method);

          String respStr = EntityUtils.toString(resp.getEntity());

          Log.d("prove", respStr); //Here I get {"name":"Car1"}

          JSONObject obj = new JSONObject(respStr);

          name = obj.getString("name");

          Log.d("prove", name); //Nothing appears

      } catch (Exception ex) {
        }

          return null;
   }

   protected void onProgressUpdate(){
   }

   protected void onPostExecute(){
   }
}

为什么,如果我的响应正在被检索,对象没有被创建? 我做错了吗?

编辑:我做了很多证明,在我的真实代码中我有respStr,但我复制了我之前制作的证明。对不起。

提前致谢!

【问题讨论】:

  • 请有人解释一下为什么不赞成?
  • 投反对票的不是我,但我想是因为您的问题是“为什么这不起作用”。您是否尝试将 Log.d("prove", ex.getMEssage); 放入 catch(Exception ex) 中?它可能会让某人崩溃,但如果你不检查它,你永远不会知道。
  • 考虑到respStr 节目和name,我猜这是一个格式错误的 JSON 字符串。
  • @Budius 我知道我提出了为什么它不起作用,但我把我的例子放在了我尝试过的地方,这就是我不理解它的原因。在捕获日志中它没有显示,所以我想它不会去那里。
  • 如果你学会了如何调试任何东西,接下来的步骤是什么?下一个断点,一行一行地走。

标签: android http-get jsonobject


【解决方案1】:

解决方案:

我终于找到了解决方案。我做了什么?

去掉这句话:

name = obj.getString("name");

并再次重写(与之前完全相同)。

并且有效!简直不可思议……

如果有人知道这里发生了什么,请告诉我。我对此非常感兴趣。

【讨论】:

    【解决方案2】:

    你在respStr 中得到了回复,但你似乎没有在任何地方使用它,你得到了respJSON 这是谁知道什么,你使用它的原因不明,更不用说你使用 i 来了从哪儿冒出来。您应该像这样创建响应 JSON:

          String respStr = EntityUtils.toString(resp.getEntity());
          JSONObject obj = new JSONObject(respStr);
    

    【讨论】:

    • 是的,对不起。我在这里复制我的真实代码时出错了。但是还是不行。
    • 什么不工作真的意味着什么?您需要如上所述更改您的代码。
    • 那,当我尝试获取 name 时,它没有存储在变量中,而是存储在响应中,正如您所看到的,它正在被检索。
    • 因为你创建 obj 错误。你需要按照我写的去做
    • 你能在 json 字符串中发布你的响应吗?可能是你弄错了标签或格式?
    【解决方案3】:

    我是什么??

    不要这样做:

    JSONObject obj = respJSON.getJSONObject(i);
    

    这样做:

    JSONObject obj = new JSONObject(respStr);
    

    【讨论】:

    • 哦,对不起,在我的真实代码中,我有 respStr 而不是 i。在这里复制它只是一个错误。对不起。现在按我的方式编辑,它也不起作用。
    • 还是不行。这是我在真实代码中的内容(再次为我的错误感到抱歉)。
    • 您是否尝试过将代码从 getJSONObject 更改为 new JSONObject,如我的回答中提到的那样
    • 通过打印您的 respStr 检查您是否收到所需的响应
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-31
    • 2018-05-12
    • 2010-10-28
    相关资源
    最近更新 更多