JSONException:java.lang.String 类型的值无法转换为 JSONObject
JSONException: Value of type java.lang.String cannot be converted to JSONObject
我是 android 的新手,但我发现了一个非常适合网络抓取工具的应用程序,我一直在努力开发它并用它填充了一个数据库。这是一个基本的应用程序,它使用 PHP 脚本从 MySQL 数据库中检索值并将它们显示在您的 android 设备上。
这里是 PHP:
<?php
try {
$conn = new PDO('mysql:host=localhost;dbname=beanbag', **********, *******);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$results=$conn->query('SELECT * FROM Recipes');
while ($results = $row->fetch(PDO::FETCH_ASSOC)){
$output[]=$row;
print(json_encode($output));
}
} catch(PDOException $e) {
echo 'ERROR: ' . $e->getMessage();
}
$conn = null;
?>
原始代码使用了 mysql_connect 但我改为实现了 PDO。
这里是 Java:
protected void onPostExecute(Void v) {
// ambil data dari Json database
try {
JSONArray Jarray = new JSONArray(result);
for(int i=0;i<Jarray.length();i++)
{
JSONObject Jasonobject = null;
//text_1 = (TextView)findViewById(R.id.txt1);
Jasonobject = Jarray.getJSONObject(i);
//get an output on the screen
//String id = Jasonobject.getString("id");
String name = Jasonobject.getString("Title");
String db_detail="";
if(et.getText().toString().equalsIgnoreCase(name)) {
db_detail = Jasonobject.getString("ingredient");
text.setText(db_detail);
break;
}
//text_1.append(id+"\t\t"+name+"\t\t"+password+"\t\t"+"\n");
}
this.progressDialog.dismiss();
} catch (Exception e) {
// TODO: handle exception
Log.e("log_tag", "Error parsing data "+e.toString());
}
}
Logcat 说:
Error parsing data org.json.JSONException: Value br of type java.lang.String cannot be converted to JSONArray
我尝试使用 this Whosebug question 中的 {left brace and }right brace 解决方案,但我认为不是这样。
在 post 上先执行获取 JSONObject,然后再执行数组。如果仍然是相同的消息,那么您的服务器没有返回正确的 json 对象。
JSONObject jobj = new JSONObject(result);
JSONArray Jarray = jobj.getJSONArray("output");
<?php
try {
$conn = new PDO('mysql:host=localhost;dbname=beanbag', **********, ********);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch(PDOException $e) {
echo 'ERROR: ' . $e->getMessage();
}
$sql=mysql_query("select * from Recipes");
while($row=mysql_fetch_assoc($sql))
$output[]=$row;
print(json_encode($output));
mysql_close();
?>
这没有任何作用。您混淆了 mysql_* 和 not possible 的 PDO。如果与 PDO 建立连接,则不能使用 mysql_* 查询访问数据库。
因此,您会遇到错误,您的页面无效 Json,从而导致错误。
相反,仅使用 PDO(由于安全问题不推荐使用 mysql_*):
<?php
try {
$conn = new PDO('mysql:host=localhost;dbname=beanbag', **********, ********);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch(PDOException $e) {
echo 'ERROR: ' . $e->getMessage();
}
$sql = $conn->query("select * from Recipes");
while (($row = $sql->fetch(PDO::FETCH_ASSOC)) !== false)
$output[]=$row;
print(json_encode($output));
?>
如果你的结果是数组列表,那么你可以使用下面的代码
ArrayList<String> list = new ArrayList<String>();
list.add("blah");
list.add("bleh");
JSONArray jsArray = new JSONArray(list);
我是 android 的新手,但我发现了一个非常适合网络抓取工具的应用程序,我一直在努力开发它并用它填充了一个数据库。这是一个基本的应用程序,它使用 PHP 脚本从 MySQL 数据库中检索值并将它们显示在您的 android 设备上。
这里是 PHP:
<?php
try {
$conn = new PDO('mysql:host=localhost;dbname=beanbag', **********, *******);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$results=$conn->query('SELECT * FROM Recipes');
while ($results = $row->fetch(PDO::FETCH_ASSOC)){
$output[]=$row;
print(json_encode($output));
}
} catch(PDOException $e) {
echo 'ERROR: ' . $e->getMessage();
}
$conn = null;
?>
原始代码使用了 mysql_connect 但我改为实现了 PDO。
这里是 Java:
protected void onPostExecute(Void v) {
// ambil data dari Json database
try {
JSONArray Jarray = new JSONArray(result);
for(int i=0;i<Jarray.length();i++)
{
JSONObject Jasonobject = null;
//text_1 = (TextView)findViewById(R.id.txt1);
Jasonobject = Jarray.getJSONObject(i);
//get an output on the screen
//String id = Jasonobject.getString("id");
String name = Jasonobject.getString("Title");
String db_detail="";
if(et.getText().toString().equalsIgnoreCase(name)) {
db_detail = Jasonobject.getString("ingredient");
text.setText(db_detail);
break;
}
//text_1.append(id+"\t\t"+name+"\t\t"+password+"\t\t"+"\n");
}
this.progressDialog.dismiss();
} catch (Exception e) {
// TODO: handle exception
Log.e("log_tag", "Error parsing data "+e.toString());
}
}
Logcat 说:
Error parsing data org.json.JSONException: Value br of type java.lang.String cannot be converted to JSONArray
我尝试使用 this Whosebug question 中的 {left brace and }right brace 解决方案,但我认为不是这样。
在 post 上先执行获取 JSONObject,然后再执行数组。如果仍然是相同的消息,那么您的服务器没有返回正确的 json 对象。
JSONObject jobj = new JSONObject(result);
JSONArray Jarray = jobj.getJSONArray("output");
<?php
try {
$conn = new PDO('mysql:host=localhost;dbname=beanbag', **********, ********);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch(PDOException $e) {
echo 'ERROR: ' . $e->getMessage();
}
$sql=mysql_query("select * from Recipes");
while($row=mysql_fetch_assoc($sql))
$output[]=$row;
print(json_encode($output));
mysql_close();
?>
这没有任何作用。您混淆了 mysql_* 和 not possible 的 PDO。如果与 PDO 建立连接,则不能使用 mysql_* 查询访问数据库。
因此,您会遇到错误,您的页面无效 Json,从而导致错误。
相反,仅使用 PDO(由于安全问题不推荐使用 mysql_*):
<?php
try {
$conn = new PDO('mysql:host=localhost;dbname=beanbag', **********, ********);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch(PDOException $e) {
echo 'ERROR: ' . $e->getMessage();
}
$sql = $conn->query("select * from Recipes");
while (($row = $sql->fetch(PDO::FETCH_ASSOC)) !== false)
$output[]=$row;
print(json_encode($output));
?>
如果你的结果是数组列表,那么你可以使用下面的代码
ArrayList<String> list = new ArrayList<String>();
list.add("blah");
list.add("bleh");
JSONArray jsArray = new JSONArray(list);