如何在android中使用volley发送params数组

Tec*_*ain 2 java android json android-volley

我正在开发一个应用程序,它将大量数据发送到server.Now我想使用volley发送一个params数组到php页面.但是我无法发送它.

将params添加为Array的代码.

String[] arr =new String[7];
    for(int i=1;i<=7;i++)
    {
        arr[i]="questionId_"+i+"_"+"ans_"+i;

    }
    HashMap<String ,String[]> params=new HashMap<String, String[]>(7);
    params.put("params", arr);
Run Code Online (Sandbox Code Playgroud)

向服务器发出请求的代码

RequestQueue que=Volley.newRequestQueue(this);

     final ProgressDialog dialog = new ProgressDialog(HealthMyHistory.this);
     dialog.setTitle("Please Wait");
     dialog.setMessage("Sending Data");
     dialog.setCancelable(false);
     dialog.show();


    CustomJobjectRequest jsObjRequest = new CustomJobjectRequest(Method.POST, url, params, new Response.Listener<JSONObject>() {

                @Override
                public void onResponse(JSONObject response)
                {
                    dialog.dismiss();



                }
            }, new Response.ErrorListener() {

                @Override
                public void onErrorResponse(VolleyError response) {

                    dialog.dismiss();
                    Toast.makeText(getApplicationContext(), "Unable to Send Data!"+" "+response.toString(), Toast.LENGTH_SHORT).show();
                }
            });
    que.add(jsObjRequest);

}



Problem is in CustomJobjectRequest there is no constructor available of type in which Hashmap accepts string & array as argument.How to do it ? 
Run Code Online (Sandbox Code Playgroud)

代码或CustomJsonObjectRequest

 package com.example.healthcoach.data;

import java.io.UnsupportedEncodingException;
import java.util.HashMap;
import java.util.Map;

import org.json.JSONException;
import org.json.JSONObject;

import com.android.volley.NetworkResponse;
import com.android.volley.ParseError;
import com.android.volley.Request;
import com.android.volley.Response;
import com.android.volley.Response.ErrorListener;
import com.android.volley.Response.Listener;
import com.android.volley.toolbox.HttpHeaderParser;


public class CustomJobjectRequest extends Request<JSONObject>{

    private Listener<JSONObject> listener;
    private Map<String, String> params;

    public CustomJobjectRequest(String url, Map<String, String> params,
              Listener<JSONObject> reponseListener, ErrorListener errorListener) {
          super(Method.POST, url, errorListener);
          this.listener = reponseListener;
          this.params = params;
    }

    public CustomJobjectRequest(int method, String url, Map<String, String> params,
              Listener<JSONObject> reponseListener, ErrorListener errorListener) {
          super(method, url, errorListener);
          this.listener = reponseListener;
          this.params = params;
      }

  public CustomJobjectRequest(int post, String url,
            HashMap<String, String[]> params2, Listener<JSONObject> listener2,
            ErrorListener errorListener) {
        // TODO Auto-generated constructor stub
    }

@Override
  protected Map<String, String> getParams() throws com.android.volley.AuthFailureError {
    return params;
  };

  @Override
  protected void deliverResponse(JSONObject response) {
      listener.onResponse(response);
  }

  @Override
  protected Response<JSONObject> parseNetworkResponse(NetworkResponse response) {
       try {
              String jsonString = new String(response.data,
                      HttpHeaderParser.parseCharset(response.headers));
              return Response.success(new JSONObject(jsonString),
                      HttpHeaderParser.parseCacheHeaders(response));
          } catch (UnsupportedEncodingException e) {
              return Response.error(new ParseError(e));
          } catch (JSONException je) {
              return Response.error(new ParseError(je));
          }
  }

}
Run Code Online (Sandbox Code Playgroud)

ρяσ*_*я K 10

使用

HashMap<String ,String> params=new HashMap<String, String>(7);
for(int i=1;i<=7;i++)
{
    params.put("params_"+i, arr[i]);
}
Run Code Online (Sandbox Code Playgroud)

CustomJobjectRequest类中,因为当前您在类中使用String类型作为值,CustomJobjectRequestString[]在创建CustomJobjectRequest类的对象时发送类型.

编辑:

将单个参数中的所有值发送到服务器使用.JSONObject使用所有键值创建一个json对象:

 JSONObject jsonObject=new JSONObject();
 for(int i=1;i<=7;i++)
    {
        arr[i]="questionId_"+i+"_"+"ans_"+i;
        jsonObject.put("params_"+i,arr[i]);
    }
HashMap<String ,String> params=new HashMap<String, String>();
params.put("params",jsonObject.toString());
Run Code Online (Sandbox Code Playgroud)

要在服务器端发送所有值params并转换为JSON对象并迭代以获取所有值

  • @TechGuy:传递Array作为参数是不可能的,但您可以使用JSONObject在单个参数中发送所有值.创建一个包含所有值的JSONObject,然后将其发送到服务器,作为`HashMap <String,String> params = new HashMap <String,String>(); params.add("params",jsonobject.toString());`现在在php上将收到的字符串从`params`转换为JSONObject以获取所有值 (2认同)