您好我想将一个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服务器上解码它。任何帮助都非常感激。
答案 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<>>();
其中数组列表是您想要的列表