接收具有数组的JSONObject并填充ListView

最后发布: 2017-10-23 12:29:19


问题
<?php
// DEVOLVE TODAS AS PESSOAS COM TODA A INFO
$app->get('/api/pessoas', function () {
    require_once('db/dbconnect.php');
    $myArray = array();
    foreach($db->pessoa()
            ->order("id")
            as $row){
        array_push($myArray, array('nome' => $row["nome"], 'idade' => 
$row["idade"]));
        $result = ['status' => true, 'data' => $myArray];
    }
    if(isset($result)){
        echo json_encode($result, JSON_UNESCAPED_UNICODE);
    }else{
        echo "Não existem resultados";
    }
});

这是我正在使用的Web服务,它为我提供了具有所有属性的数据库中每个人的正确答案

{"status":true,"data":[{"nome":"Paulo","idade":"23"},{"nome":"Manuela","idade":"23"},{"nome":"Paulo2","idade":"25"},{"nome":"Maranhao Faria","idade":"888"}]}    

现在,我想用Java接收它并用它填充一个列表:

public class ListInfo extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_list_info);

    String url = "paulomaranhao.000webhostapp.com/myslim/api/pessoas";

    JsonObjectRequest jsObjRequest = new JsonObjectRequest
            (Request.Method.GET, url, null, new Response.Listener<JSONObject>() {

                @Override
                public void onResponse(JSONObject response) {

                    try{
                        JSONArray array = response.getJSONArray("data");
                        List<JSONObject> items = new ArrayList<>();
                        for(int i = 0; i < array.length(); i++){
                            items.add(array.getJSONObject(i));
                        }

                        ArrayAdapter<JSONObject> adapter = new ArrayAdapter<>(ListInfo.this, android.R.layout.simple_list_item_1, items);
                        ((ListView) findViewById(R.id.list)).setAdapter(adapter);
                    }catch(JSONException e){}
                }
            }, new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    Toast.makeText(ListInfo.this, getResources().getString(R.string.errorShowing), Toast.LENGTH_SHORT). show();
                    return;
                }
            });

    // Access the RequestQueue through your singleton class.
    MySingleton.getInstance(this).addToRequestQueue(jsObjRequest);
}

当我调试时,它甚至都没有输入onResponse。 之后,我想填写该列表(如果可以自定义),或者仅填写该人的姓名。

非常感谢!!!


解决了我的问题! 我将其添加到队列MySingleton中,但一开始并未进行初始化。 它只是缺少此RequestQueue声明:

private RequestQueue queue;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_rest_post);

    queue = MySingleton.getInstance(this.getApplicationContext()).
            getRequestQueue();
}
java php android web-services
回答

Internet权限已添加并作为其他方面的工作,因为我已经有两个不同的活动可以正常工作,一个活动将一个人插入数据库,另一个活动通过id获取一个人的信息,所有这些活动都可以进行。 而且浏览器中的URL是正确的