【问题标题】:android volley post parameter and receive jsonandroid volley post参数并接收json
【发布时间】:2016-03-28 16:01:44
【问题描述】:

我对 android 开发相当陌生,我正在尝试发出一个 android volley 请求,该请求将一个 ID 发送到 php 服务,如果它在服务器端匹配,它应该在 json 中返回与其关联的所有值,然后在 android 应用程序上收到并显示。任何帮助将不胜感激

<?php

require("include/config.php");

if (!empty($_POST)) {

    $query = " SELECT * FROM music WHERE musicID = :ID  " ;

    $query_params = array(
        ':ID' => $_POST['ID'],


            );

    try {
        $statement   = $db->prepare($query);
        $result = $statement->execute($query_params);
    }
    catch (PDOException $ex) {


        $response["success"] = 0;
        $response["message"] = "  error";
        die(json_encode($response));

    }

    $result = $statement->fetchAll();

    if($result){

            $return =array();

            foreach($result as $rows){
        $json = array();
        $json["title"] = $rows["title"];
        $json["rating"]= $rows["rating"];
        $json["Price"] = $rows["Price"];
        $json["Description"] = $rows["Description"];

        array_push ($return,$json);



            }
     echo stripcslashes(json_encode($datareturn, JSON_PRETTY_PRINT));








    }




} else {
}

?>

android 凌空请求

 JsonArrayRequest jsonArrayRequest=new JsonArrayRequest(URL, new Response.Listener<JSONArray>() {
            @Override
            public void onResponse(JSONArray response) {

                for(int i=0;i<response.length();i++){
                    try{
                        JSONObject obj=response.getJSONObject(i);
                        Item item=new Item();
                        item.setTitle(obj.getString("title"));
                        item.setImage(obj.getString("image"));


                        //add to array
                        array.add(item);
                    }catch(JSONException ex){
                        ex.printStackTrace();
                    }
                }
                adapter.notifyDataSetChanged();
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {

            }
        });
        AppController.getmInstance().addToRequesQueue(jsonArrayRequest,ID);

【问题讨论】:

  • 您面临哪些问题?
  • 我没有从服务器返回任何东西,例如项目数组为空。无法弄清楚到底出了什么问题。我用 html 表单仔细检查了脚本,它工作正常。所以java代码请求有问题
  • 您如何在服务器上收到ID 字段?在 RequestBody 或 url 路径中。

标签: php android json android-volley


【解决方案1】:

问题是,你有一个POST 请求,不幸的是,在 volley 中没有直接的constructor 来发送POSTJsonArray 的请求。

android volley 团队可能会在以后添加它,但现在你可以这样做:

第 1 步:创建您的类并扩展 JsonArrayRequest,然后您应该覆盖。

public class CustomJsonArrayRequest extends JsonArrayRequest {
    public CustomJsonArrayRequest(int method, String url, JSONObject jsonRequest, Listener<JSONArray> listener, ErrorListener errorListener) {
        super(method, url, jsonRequest, listener, errorListener);
    }
}

第 2 步:现在您有了发送请求的构造函数,您可以使用它轻松发送请求。

//If you are sending ID inside request body
JsonObject requestJson = new JsonObject();
requestJson.put("ID", "Your ID Value");

CustomJsonArrayRequest jsonArrayRequest=new CustomJsonArrayRequest(RequestMethod.POST,URL, requestJson, Response.Listener<JSONArray>() {
                @Override 
                public void onResponse(JSONArray response) {

            for(int i=0;i<response.length();i++){
                try{ 
                    JSONObject obj=response.getJSONObject(i);
                    Item item=new Item();
                    item.setTitle(obj.getString("title"));
                    item.setImage(obj.getString("image"));


                    //add to array 
                    array.add(item);
                }catch(JSONException ex){
                    ex.printStackTrace();
                } 
            } 
            adapter.notifyDataSetChanged(); 
        } 
    }, new Response.ErrorListener() {
        @Override 
        public void onErrorResponse(VolleyError error) {

        } 
    }); 
    AppController.getmInstance().addToRequestQueue(jsonArrayRequest);

另外,您需要在 url 中传递此 ID。

如果您需要问其他任何问题,请告诉我。 :)

【讨论】:

  • 我已经扩展了baseactivity的类,所以我需要创建一个名为CustomeJsonArray的新类吗?
  • 是的!创建新类 CustomJsonArrayRequest!还告诉我你想在哪里有你的ID 字段?
  • 好的。 ID 使用 intent.putextra 从上一个活动传递到此活动,我将其存储为字符串。
  • 你是如何将它传递给服务器的?也让我知道它是否有效?
  • 这就是我正在努力解决的部分,我现在所做的就是将它添加到请求中,但它似乎不起作用。
猜你喜欢
  • 2016-08-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-23
  • 1970-01-01
  • 1970-01-01
  • 2013-05-13
相关资源
最近更新 更多