Javascript 试图获取表行计数值,但转换结果java.lang.NullPointerException时出错:lock==null

Javascript 试图获取表行计数值,但转换结果java.lang.NullPointerException时出错:lock==null,javascript,php,android,json,jsonobject,Javascript,Php,Android,Json,Jsonobject,我是这方面的新手,所以我需要帮助解决当前的问题,我正在尝试获取表行计数值,但出现了“错误解析数据org.json.JSONException:java.lang.String类型的值结果无法转换为JSONObject” 下面是我的rowcount.php: 拆下printf行并按如下所示进行更换 $row_cnt = $result->num_rows; // remove this line //printf("Result set has %d rows.\n", $row_cnt

我是这方面的新手,所以我需要帮助解决当前的问题,我正在尝试获取表行计数值,但出现了“错误解析数据org.json.JSONException:java.lang.String类型的值结果无法转换为JSONObject”

下面是我的rowcount.php:


拆下printf行并按如下所示进行更换

$row_cnt = $result->num_rows;

// remove this line
//printf("Result set has %d rows.\n", $row_cnt);

$response["rowcount"] = $row_cnt;

//replace this line
//die(json_encode($response));

echo json_encode($response);exit;

您面临两个问题:

1) 05-25 14:43:42.974:E/JSON解析器(23557):解析数据时出错 org.json.JSONException:java.lang.String类型的值结果不能 将转换为JSONObject

当您尝试从字符串创建JSON对象,而该字符串实际上不是JSON对象字符串时,会触发此异常

如果您得到的是
{“rowcount”:5}
,那么这就是正确的JSON对象

2) java.lang.RuntimeException:执行时出错 doInBackground() 原因:android.view.ViewRootImpl$CalledFromErrorThreadException:只有创建视图层次结构的>原始线程才能接触其视图

问题描述本身是不言自明的。仅供参考,由于
doInBackground()
中写入了以下行,因此出现了此问题:

在执行后台操作时,不能更新任何视图(即TextView或任何其他视图)。换句话说,您可以只从主线程更新UI

为此,有两种方法:

  • doInBackground()
    方法中实现
    runOnUiThread()
    ,并将视图更新代码写入其中
  • onPostExecute()
    方法更新UI

  • 我终于解决了我的问题,首先我创建了一个config.php来连接数据库


    rowcount.php
    中删除调试打印语句。现在您正在生成无效的JSON。这是整个反应matters@JeroenSmit我删除了printf(“结果集有%d行。\n”,$row\u cnt);在rowcount.php中,当我运行它时,出现了新的错误,我在上面编辑了我的日志,请查看if条件(rowcount.php)中的替换代码,正如我在下面提到的,您能从服务器获得响应吗?如果可能的话,将响应粘贴到这里!我已经发布了两个问题的解决方案的答案!如果PHP端有任何错误,我就帮不了你!错误仍然存在,我编辑了上面的帖子,请看一下日志。你是否替换了我上面提到的if块内的代码。是的,我替换了它,正如你提到的,但问题似乎出在我的row\u count\u测试类上,但我不太确定。你能记录web服务的响应吗。怎么做?我很抱歉,因为我还是新手好吧,我会试试的,先生,我稍后会发布结果,非常感谢你,帕雷什先生,这很容易理解。帕雷什先生,我已经尝试过你的解决方案,我担心问题仍然存在于我的PHP文件中,在我的android应用程序中,该值返回null。无论如何,非常感谢你的帮助,先生,我真的很感激。我会设法解决这个问题。不要删除旧的细节,因为答案看起来会和你的实际问题不一样!而是在问题的底部包含更新的细节!哦,好吧,对不起,这真的是我的错,先生,我是新来的。谢谢你告诉我应该是什么样子。
    testRowCount.setText(row);