Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/215.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何捕获响应数组&;然后在Listview上设置?如何以数组形式获取响应&;在Android中设置listview?_Php_Android_Json_Listview_Android Volley - Fatal编程技术网

Php 如何捕获响应数组&;然后在Listview上设置?如何以数组形式获取响应&;在Android中设置listview?

Php 如何捕获响应数组&;然后在Listview上设置?如何以数组形式获取响应&;在Android中设置listview?,php,android,json,listview,android-volley,Php,Android,Json,Listview,Android Volley,我已经发布了这个问题,但没有人提供解决方案,即使我再次编辑我的帖子,所以我删除并再次发布 我不太了解StringRequest类的工作原理及其响应。请给我一个简单而恰当的指导。它只响应一个Jsonobject,而不是数组。 在这个json响应中,我不知道如何捕获一个数据数组&然后在Listview上设置 服务器响应 Json字符串请求截击 PHP代码 ServiceRequest类 公共类SevakRequest扩展了StringRequest{ 私有静态最终字符串登录\u请求\u URL=

我已经发布了这个问题,但没有人提供解决方案,即使我再次编辑我的帖子,所以我删除并再次发布

我不太了解StringRequest类的工作原理及其响应。请给我一个简单而恰当的指导。它只响应一个Jsonobject,而不是数组。 在这个json响应中,我不知道如何捕获一个数据数组&然后在Listview上设置

服务器响应 Json字符串请求截击 PHP代码
<?php
$con=mysqli_connect(xxxxxxxxxxxxx);
$state=$_POST[“state”];
$dist=$_POST[“dist”];
$statement=mysqli\u prepare($con,“选择first\u name、last\u name、mobile FROM first WHERE state=?和dist=?”);
mysqli_stmt_bind_param($statement,“ss”,$state,$dist);
mysqli_stmt_execute($statement);
mysqli_stmt_store_结果($statement);
mysqli_stmt_bind_result($statement、$fname、$lname、$mobile);
$response=array();
$response[“success”]=false;
while(mysqli_stmt_fetch($statement))
{
$response[“success”]=true;
$response[“first_name”]=$fname;
$response[“last_name”]=$lname;
$response[“mobile”]=$mobile;
}
echo json_编码($response);
?>
ServiceRequest类
公共类SevakRequest扩展了StringRequest{
私有静态最终字符串登录\u请求\u URL=”http://XXXXXX.php";
私有映射参数;
public SevakRequest(字符串状态、字符串距离、Response.Listener)
{
super(Method.POST、LOGIN\u REQUEST\u URL、listener、null);
params=新的HashMap();
//参数put(“服务”,服务);
参数put(“状态”,状态);
参数put(“dist”,dist);
}
@凌驾
公共映射getParams(){
返回参数;
}
}
主要活动类
公共类搜索结果扩展活动{
按钮btn1、btn2;
ListView lv1;
文本视图tv1;
字符串serv,stat,dist;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u search\u result);
btn1=(按钮)findViewById(R.id.btn1);
btn2=(按钮)findViewById(R.id.btn2);
lv1=(ListView)findViewById(R.id.lv1);
tv1=(TextView)findViewById(R.id.tv1);
Intent in=getIntent();
serv=in.getStringExtra(“key1”);
stat=in.getStringExtra(“键2”);
dist=in.getStringExtra(“键3”);
tv1.setText(serv+“>>”+stat+“>>”+dist);
Response.Listener=新建Response.Listener(){
@凌驾
公共void onResponse(字符串响应){
试一试{
JSONObject jsonResponse=新的JSONObject(响应);
boolean success=jsonResponse.getBoolean(“success”);
如果(成功){
JSONArray JSONArray=新JSONArray(响应);
int length=jsonArray.length();
List listContents=新的ArrayList(长度);
for(int i=0;i
首先确保您的json数据是正确的。我猜你想要这个:

现在只需返回一个静态json文件,这样您就可以专注于开发应用程序了。 然后您可以更改java代码,比如
JSONArray arr=jsonResponse.getJSONArray(“数据”)以获取联系人对象的数组


个人而言,我更喜欢使用像Gson这样的库来简化json的en-/解码。

发布您的服务器响应。
I/System.out:{“success”:true,“first_name”:“savha”,“last_name”:“jiii”,“mobile”:2147483647}W/System.err:org.json.JSONException:Value{“success”:true,“first_name”:“savha”,“last_name”:“jiii”,“mobile”:2147483647}无法将类型为org.json.JSONObject转换为JSONArray
response,现在已添加到Problem中您正在json响应中接收单个对象。解析的第一部分是正确的
JSONObject jsonResponse=newjsonobject(response)但在此之后,请再次尝试将其放入数组中。这意味着你期待的东西与你收到的不同。如果我正确理解了您的php代码,那么也有一个错误,您总是覆盖$response数组中的相同字段。它清楚地表明您的响应是JSONObject而不是JSONArray
I/System.out:
 {
 "success":true,"first_name":"savha","last_name":"jiii","mobile":2147483647
 }
 W/System.err: org.json.JSONException:
 Value
 {
 "success":true,"first_name":"savha","last_name":"jiii","mobile":2147483647
 }
 of type org.json.JSONObject cannot be converted to JSONArray
< ?php

$con=mysqli_connect(XXXXXXXXXXXXXX);

$state=$_POST["state"];

$dist=$_POST["dist"];

$statement=mysqli_prepare($con,"SELECT first_name,last_name,mobile FROM first        WHERE state=? AND dist=?");

mysqli_stmt_bind_param($statement,"ss",$state,$dist);

mysqli_stmt_execute($statement);

mysqli_stmt_store_result($statement);

mysqli_stmt_bind_result($statement,$fname,$lname,$mobile);

$response=array();

$response["success"]=false;

while(mysqli_stmt_fetch($statement))

{

$response["success"]=true;

$response["first_name"]=$fname;

$response["last_name"]=$lname;

$response["mobile"]=$mobile;

}

echo json_encode($response);

?>
public class SevakRequest  extends StringRequest {

private static final String LOGIN_REQUEST_URL="http://XXXXXX.php";
private Map<String ,String> params;

public SevakRequest(String state,String dist, Response.Listener<String> listener)
{
    super(Method.POST,LOGIN_REQUEST_URL,listener,null);
    params=new HashMap<>();
   // params.put("service",service);
    params.put("state",state);
    params.put("dist",dist);
}

@Override
public Map<String, String> getParams() {
    return params;
}
}
public class SearchResult extends Activity {
Button btn1,btn2;
ListView lv1;
TextView tv1;
String serv, stat, dist;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_search_result);
    btn1 = (Button) findViewById(R.id.btn1);
    btn2 = (Button) findViewById(R.id.btn2);
    lv1 = (ListView) findViewById(R.id.lv1);
    tv1 = (TextView) findViewById(R.id.tv1);

    Intent in = getIntent();
    serv = in.getStringExtra("key1");
    stat = in.getStringExtra("key2");
    dist = in.getStringExtra("key3");
    tv1.setText(serv + " >> " + stat + " >> " + dist);

  Response.Listener<String> listener = new Response.Listener<String>() {
        @Override
        public void onResponse(String response) {
            try {
                JSONObject jsonResponse = new JSONObject(response);
                boolean success = jsonResponse.getBoolean("success");

                if (success) {
                    JSONArray jsonArray = new JSONArray(response);
                    int length = jsonArray.length();
                    List<String> listContents = new ArrayList<String>(length);
                    for (int i = 0; i < length; i++) {
                        String fname = jsonResponse.getString("first_name").toString();
                        String lname = jsonResponse.getString("last_name").toString();
                        String mobile = jsonResponse.getString("mobile").toString();
                        listContents.add("First name: " + fname + "\nLast name: " + lname + "\nMobile: " + mobile);
                    }
                    lv1.setAdapter(new ArrayAdapter<String>(getApplicationContext(), android.R.layout.simple_list_item_1, listContents));

                } else {
                    Toast.makeText(getApplicationContext(), "Error occurred", Toast.LENGTH_LONG).show();
                }
            } catch (JSONException e) {
                e.printStackTrace();
            }
        }
    };
    SevakRequest sevakRequest = new SevakRequest(stat, dist, listener);
    RequestQueue queue = Volley.newRequestQueue(getApplicationContext());
    queue.add(sevakRequest);
}
}
{
  "success": true,
  "data": [{
    "first_name": "savha",
    "last_name": "jiii",
    "mobile": 2147483647
  }, {
    "first_name": "john",
    "last_name": "smith",
    "mobile": 333123456
  }]
}