虽然我知道这个问题已经多次发布在堆栈溢出上,但我已经尝试了所有解决方案,但对我来说没有任何效果。
我正在尝试在列表视图中显示数据。数据以json格式存储,在获取数据时,似乎android没有读取JSON数组,因此数据不会出现在列表视图中,并且它仍然是空的。
Java文件:
<?php
session_start();
$cid = $_SESSION["cid"];
$rno = $_SESSION["rno"];
$response = array();
$conn=new PDO('mysql:host=localhost;dbname=result','root' ,'');
$result=$conn->query("Select * from $cid where RegistrationNumber = '$rno'");
if($result->rowcount()>0)
{
$response["products"] = array();
foreach($result as $row)
{
$product["Semester"] = $row["Semester"];
$product["Score"] = $row["Score"];
$response["success"] = 1;
array_push($response["products"], $product);
echo json_encode($response);
}
}
else
{
$response["success"] = 0;
$response["message"] = "No record found.";
echo json_encode($response);
}
?>
}
php文件:
{"products":[{"Semester":"0","Score":"0"}],"success":1}
我已通过登录页面传递了cid,rno和密码,以下是运行读取数据页面生成的json输出。
json输出:
True
答案 0 :(得分:0)
我对您的代码发表评论可能有所帮助。以下行无用
JSONObject object = new JSONObject(json.toString());
因为您可以使用json
作为JSONObject
,而不是创建新的。{
答案 1 :(得分:0)
在回复Sarthak Garg的评论时,我发布了一个使用Gson将String响应转换为Java对象的示例。
我个人采用不同的方法来调用您的Web服务,但这超出了本次讨论的范围,所以我只想说明我将根据您现有的代码示例做些什么。
代码示例中的以下行为您提供了一个可以轻松转换为String的json对象。
JSONObject json = jParser.makeHttpRequest(url_readResult, "GET",param);
String myString = json.toString();
Gson为您做的是解析json并从中提取所需的各种部分的所有繁琐工作。要了解Gson的全部功能,你需要做一些谷歌搜索,我给你的样本只是你可以用它做的一件事。
此示例的作用是创建一个新的Gson实例,然后使用该实例将您的json String转换为POJO(Plain Old Java Object)。将YourPojo类视为一个模板,您可以将其用于Gson,以便告诉它包含json的样子以及您希望生成的对象看起来像什么。
Gson gson = new Gson();
YourPojo pojo = gson.fromJson(myString, YourPojo.class);
你需要做的唯一额外工作就是创建YourPojo类,谢天谢地,有一些工具可以帮助解决这个问题,例如: this one
这些工具将采用您提供的json示例,并为您生成Pojo类或类。您所需要做的就是提供班级名称。
如果您已成功实施此功能,则可以在pojo对象上调用pojo.getProducts()
和pojo.getSuccess()
等方法。