从Android发送数组并使用Volley在PhP服务器上接收

时间:2015-12-02 08:18:17

标签: php android arrays android-volley

您好我想将一个String值数组发送到PhP服务器和PhP解码并将它们存储在PhP变量中

这是我在android studio的代码

private void getEventDetailRespond(RequestQueue requestQueue) {
        JSONObject params = new JSONObject();
        try {
            for (int i=0; i <eventIDBeacon.size();i++){
                params.put(Config.EVENT_ID, eventIDBeacon.get(i));
            }
        } catch (JSONException e) {
            e.printStackTrace();
        }
        //Creating a JSONObject request
        JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.POST,Config.DATA_URL,params.toString(),
                new Response.Listener<JSONObject>() {
                    @Override
                    public void onResponse(JSONObject respond) {
                            try {
                                Toast.makeText(Beacon_MainActivity.this,"eventDetail respond "+respond.toString(),Toast.LENGTH_LONG).show();
                                eventArray = new JSONArray();
                                eventDetail = new ArrayList<>();
                                eventArray = respond.getJSONArray("result");
                                eventDetail = getEventDetail(eventArray);

                            } catch (JSONException e) {
                                e.printStackTrace();
                            }

                    }
                },
                new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
                            Toast.makeText(Beacon_MainActivity.this, "Unable to fetch data event Detail: " +error.getMessage(),Toast.LENGTH_LONG).show();
                        }
                    }
                );

        //Adding request to the queue
        requestQueue.add(jsonObjectRequest);

    }

    private ArrayList getEventDetail(JSONArray j) {
        ArrayList event = new ArrayList();
        //Traversing through all the items in the json array
        for (int i = 0; i < j.length(); i++) {
            try {
                //Getting json object
                JSONObject json = j.getJSONObject(i);

                //Adding the name of the event to array list
                event.add(json.getString(Config.EVENT_TITLE));
            } catch (JSONException e) {
                e.printStackTrace();
            }
        }

        if (event.isEmpty()) eventView.setVisibility(View.INVISIBLE);
        else {
            if (beacons.size()!=0) {
                checkIn.setVisibility(View.VISIBLE);
                eventView.setVisibility(View.VISIBLE);

                spinner.setAdapter(new ArrayAdapter<String>(Beacon_MainActivity.this, android.R.layout.simple_spinner_dropdown_item, event));
            }else {
                checkIn.setVisibility(View.INVISIBLE);
                eventView.setVisibility(View.INVISIBLE);
            }

        }
        return event;
    }

从PhP大小接收,这是我的代码

<?php

if($_SERVER['REQUEST_METHOD']=='POST'){

// decoding the json array
$post = json_decode(file_get_contents("php://input"), true);


$eventID = $post['EventID'];



require_once('dbconnect.php');

$sql = "SELECT EventID, EventTitle, EventDesc, EventTime FROM Event WHERE EVENTID = '$eventID'";

$res = mysqli_query($con,$sql);

$result = array();


 while ($row = mysqli_fetch_array($res)){
        array_push($result,array(
            'EventID'=>$row['EventID'],
            'EventTitle'=>$row['EventTitle'],
            'EventDesc'=>$row['EventDesc'],
            'EventTime'=>$row['EventTime']
        ));
    }

        header('Content-Type: application/json');
    echo json_encode(array('result'=>$result), 256);

    mysqli_close($con);


}

似乎没有工作,因为我无法发送和阵列到PhP服务器并在PhP服务器上解码它。任何帮助都非常感激。

2 个答案:

答案 0 :(得分:1)

首先在ArrayList中的Object中:创建JSONObjectmethod名称作为getJSONObject,就像这样

public class EstimateObject {
String id, name, qty, price, total;
public EstimateObject(String id, String name, String qty, String price, String total, int position)
{
    this.id = id;
    this.name = name;
    this.qty = qty;
    this.price = price;
    this.total =total;
    this.position = position;
}
 public JSONObject getJSONObject() {
    JSONObject obj = new JSONObject();
    try {
        obj.put("Id", id);
        obj.put("Name", name);
        obj.put("Qty",qty);
        obj.put("Price", price);
        obj.put("Total", total);
    }
    catch (JSONException e) {
        e.printStackTrace();
    }
    return obj;
}

Aftrer以下是我在活动中如何转换它

    JSONObject JSONestimate = new JSONObject();
    JSONArray myarray = new JSONArray();

    for (int i = 0; i < items.size(); i++) {

        try {
            JSONestimate.put("data:" + String.valueOf(i + 1), items.get(i).getJSONObject());
            myarray.put(items.get(i).getJSONObject());

        } catch (JSONException e) {
            e.printStackTrace();
        }
    }
    Log.d("JSONobject: ", JSONestimate.toString());
    Log.d("JSONArray : ", myarray.toString());

这里我转换了JSONObject和JSONArray类型。

之后

map.put("jsonarray",myarray.toString());

在php中

$json = $_POST['jsonarray'];
$json_array = json_decode($json,true);

答案 1 :(得分:0)

你必须在你的getEventDetailRespond方法中覆盖volley的getParams方法

 @Override
protected Map<String, String> getParams() throws com.android.volley.AuthFailureError {
 JSONObject params = new JSONObject();
    try {
        for (int i=0; i <eventIDBeacon.size();i++){
            params.put(Config.EVENT_ID, eventIDBeacon.get(i));
        }
    } catch (JSONException e) {
        e.printStackTrace();
    }
return params;
};

这是使用Volley库发送params的方式.. 在你的情况下,你必须创建这个:

 Map<String, ArrayList<>> params = new          
       HashMap<String,ArrayList<>>();

其中数组列表是您想要的列表