【问题标题】:Get JSON response from php backend in android从android中的php后端获取JSON响应
【发布时间】:2019-02-05 09:54:39
【问题描述】:

我正在向php 服务器发送一些数据并执行一些database 操作,并在数据库中的insert 操作之后将json 数据返回到android 应用程序

数据库进程成功,但我无法在 android 中获得 json 响应! 我在下面的代码中使用 AsyncTask。

try {
            //connect to php and send data code...

            HttpResponse response = httpclient.execute(httppost);
            InputStream inputStream = response.getEntity().getContent();
            String result = convertInputStreamToString(inputStream);

            if (result != null) {
                try {

                    JSONObject json = new JSONObject(result);
                    Log.i("json", json.getString("insert_sucss"));
                    if (json.has("insert_err")) {
                        Toast.makeText(RegisterActivity.this, json.getString("insert_err"), Toast.LENGTH_LONG).show();
                    }
                    if (json.has("insert_sucss")) {
                        Toast.makeText(RegisterActivity.this, json.getString("insert_sucss"), Toast.LENGTH_LONG).show();
                    }
                }
                catch (JSONException e)
                {
                    e.printStackTrace();
                }

            }
        }
        catch (Exception e)
        {
            Log.e("log_tag", "Error:  " + e.toString());
        }
        return null;
    }


    private String convertInputStreamToString(InputStream inputStream) {
        try {
            BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
            StringBuilder builder = new StringBuilder();

            String line = "";

            while ((line = reader.readLine()) != null) {
                builder.append(line);
            }

            return builder.toString();
        }
        catch (IOException e) {
            e.printStackTrace();
        }

        return null;
    }

【问题讨论】:

  • “但我不能在 android 中提供 json 数据!” - 你是什么意思“不能”?您收到错误消息吗?堆栈跟踪?
  • 编辑的内容...不,我没有错误,也没有显示日志
  • 我认为响应变量为空!!如何检查?
  • 尝试调试并检查结果是否为空
  • 但在带有 log_tag 的 catch 日志中显示错误

标签: java php android jsonresponse


【解决方案1】:

如果找不到键,getString() 方法会抛出异常。而是使用 has() 方法。

去掉日志语句Log.i("json", json.getString("insert_sucss"));或者改成json.has("insert_sucss")

另外,如果您只发送 2 个错误代码(insert_sucss 和 insert_err),请将 if 条件更改为类似的内容

if (json.has("insert_err")) 
{
      Toast.makeText(RegisterActivity.this, json.getString("insert_err"), Toast.LENGTH_LONG).show();
}
else 
{
      Toast.makeText(RegisterActivity.this, json.getString("insert_sucss"), Toast.LENGTH_LONG).show();
}

否则像这样覆盖所有可能性

if (json.has("insert_err")) 
{
      Toast.makeText(RegisterActivity.this, json.getString("insert_err"), Toast.LENGTH_LONG).show();
}
else if(json.has("insert_sucss"))
{
      Toast.makeText(RegisterActivity.this, json.getString("insert_sucss"), Toast.LENGTH_LONG).show();
}
else
{
      Toast.makeText(RegisterActivity.this, "Unexpected Error", Toast.LENGTH_LONG).show();
}

【讨论】:

  • 在 toast 中,第二个参数应该是文本!!
  • 哦,我的错。不小心将所有json.getString() 替换为json.has()。我会编辑它
  • Log.i("json", json.getString("insert_sucss")); 如果没有 insert_succss 关键字,此日志消息将触发异常。除非您确定它存在,否则不要使用 getString
  • 我当时给出的代码只是为了改进你的代码。我的答案是突出显示的那个。
【解决方案2】:

我发现了这个问题 我从工作线程调用它。这是错误的

我修复了我的代码

 runOnUiThread(new Runnable() {

                            public void run() {
                                Toast.makeText(G.context, "text", Toast.LENGTH_LONG).show();
                            }
                        });

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-04
    • 1970-01-01
    • 1970-01-01
    • 2020-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多