如何使用指定参数的Android Volley GET方法?

时间:2016-03-07 08:45:55

标签: php android android-volley

我知道如何使用Volley GET方法进行登录,但如果需要指定特定的“id”怎么办?我使用intent.putExtra将列表项的“id”从远程数据库传递到另一个活动。在下一个活动中,我将如何利用Volleys的GET方法使用通过“id”传递的另一个表来解析和显示数据?

在浏览器中,我可以使用以下内容获取具有指定网址和参数的响应:

http://localhost/demoapp/fetch.php?pid=2

但我不知道如何将该网址传递给Volley请求并在列表视图中显示响应。像这样:

"http://localhost/demoapp/fetch.php?pid=" + pid

其中“pid”是相应id的传递字符串。

编辑:PHP代码

    <?php
include_once("config.php");

$query=mysqli_query($con,"SELECT * FROM comments WHERE pid=".$_GET['pid']);

$array;
while($result=mysqli_fetch_assoc($query)){

$array[]=$result;
}

echo json_encode($array);
?>

编辑2:JAVA代码 主要活动

    JsonArrayRequest request = new JsonArrayRequest(url+url_file,
                new Response.Listener<JSONArray>() {
                    @Override
                    public void onResponse(JSONArray response) {
                        Log.d(TAG, response.toString()); try {
                            for(int i=0;i<response.length();i++){
                                String pid=response.getJSONObject(i).getString("pid");
                                String name=response.getJSONObject(i).getString("product_name");
                                String img;
                                String thumb = response.getJSONObject(i).getString("product_thumb");
                                String detail = response.getJSONObject(i).getString("product_detail");
                                String rating = response.getJSONObject(i).getString("product_rating");

                                img = response.getJSONObject(i).getString("product_pic");

                                rowdata.add(new ProductRowData(pid,name,img,thumb,detail,rating));
                            }
                        } catch (JSONException e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        }
                        adapter=new ProductsAdapter(MainActivity.this, rowdata);
                        list.setAdapter(adapter);
                        dialog.dismiss();
                    }
                }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                Log.d(TAG, "Error: " + error.getMessage());
                dialog.dismiss();
            }
        });

        VolleyController.getInstance().addToRequestQueue(request, tag_json_arry);

单击列表项时,其余数据将使用intent.putExtra传递给详细活动。我当时尝试做的是,点击FAB后,应显示来自不同表格的评论列表,其中包含该产品ID。

2 个答案:

答案 0 :(得分:5)

如果要使用GET,可以使用url参数创建请求:

String uri = String.format("http://localhost/demoapp/fetch.php?pid=%1$s", pid);

StringRequest myReq = new StringRequest(Method.GET,
                                    uri,
                                    createMyReqSuccessListener(),
                                    createMyReqErrorListener());

或者更好,你可以使用POST:

StringRequest stringRequest = new StringRequest(Request.Method.POST, "http://localhost/demoapp/fetch.php", new Response.Listener<String>()
{
    @Override
    public void onResponse(String s)
    {
    }
}, new Response.ErrorListener()
{
    @Override
    public void onErrorResponse(VolleyError volleyError)
    {
    }
})
{
    @Override
    protected Map<String, String> getParams()
    {
        Map<String, String> params = new HashMap<String, String>();
        params.put("id", pid);
        return params;
    }
};

取自:Volley - POST/GET parameters

答案 1 :(得分:0)

        @Override
        protected Map<String, String> getParams() {
            HashMap<String,String> params = new HashMap<>();
            params.put("deviseType","1");
            params.put("langId","1");
            params.put("userType","2");
            return params;
        }