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

3
我知道如何使用 Volley 的 GET 方法进行登录,但如果我需要指定特定的“id”怎么办? 我正在使用 intent.putExtra 将远程数据库中列表项的“id”传递到另一个活动。在下一个活动中,我将如何利用 Volley 的 GET 方法来解析并显示使用传递的“id”从另一个表中获取的数据?
在浏览器中,我可以使用以下方法获取带有指定 URL 和参数的响应:
http://localhost/demoapp/fetch.php?pid=2

但我不知道如何将该URL传递给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的评论列表。

你使用GET方法遇到了什么问题?你似乎按照正确的步骤进行操作。 - Jyotman Singh
@JyotmanSingh 正在尝试找出如何在 Android 应用程序中检索 JSON 响应。请查看我的下一个编辑。 - Steve C.
1
你提到你知道如何使用Volley GET方法。在类似登录的方式下使用它。使用JsonObjectRequest获取JSON数据,然后解析并在应用程序中显示它。 - Jyotman Singh
2个回答

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参数


如果我选择使用POST方法,那么我需要将PHP代码更改为.$_POST['pid']而不是.$_GET['pid']吗? - Steve C.
是的,你必须更改你的后端。 - dan
如果我更改了PHP中的方法,并尝试使用相同的URL和添加的参数,那么我会在ID上得到未定义的索引。 - Steve C.
如果您正在使用POST,您不需要手动添加参数。我会进行编辑。 - dan
我已经按照你的回答尝试运行我的应用程序,但是出现了错误。我需要你的帮助,而不是再发布一个相同问题的提问。请告诉我你是否有空。我需要尽快解决这个问题。谢谢。 - Steve C.
我不确定你是否会回复,所以我发了一个新的SO问题。这是我的错误链接 - Steve C.

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;
        }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接