【问题标题】:I want to send json object as parameter in volley call我想在 volley call 中发送 json 对象作为参数
【发布时间】:2016-10-07 17:32:09
【问题描述】:

您好,我知道使用 Map 的凌空呼叫发送参数 例如

private void SignInWithEmail() {
        //email= String.valueOf(mEmail.getText());
        //pass = String.valueOf(mPassword.getText());

        String url = RequestUrls.getInstance().signInByEmail();
        StringRequest mRequest = new StringRequest(Request.Method.POST, url, new Response.Listener<String>() {
            @Override
            public void onResponse(String response) {

                Log.v(TAG, "Login with email" + response);
                try {
                    JSONObject jsonResponse = new JSONObject(response);
                    String code = jsonResponse.getString("code");
                    if (code == "1") {

                        JSONArray UserDetailArray = jsonResponse.getJSONArray("document");
                        Log.v("Login with email", UserDetailArray.toString());
                        JSONObject finalObject = UserDetailArray.getJSONObject(0);
                        String User_email = finalObject.getString("Email");
                        getUserByEmail(User_email);
                    } else {
                        Toast.makeText(getApplicationContext(), "Invalid Email or Password", Toast.LENGTH_SHORT).show();
                        mPassword.setText("");
                    }
                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                Log.v(TAG, "Request for getUserByEmail Error: " + error.toString());
            }
        }) {
            @Override
            protected Map<String, String> getParams() throws AuthFailureError {

                Map<String, String> params = new HashMap<String, String>();
                params.put("Action", "GetUserByEmail");
                //Log.v("Login", "Action Email for put: " + email);
                params.put("UserName", email);
                params.put("Password", pass);
                return params;
            }
        };

        VolleySingleton.getInstance(getApplicationContext()).addToRequestQueue(mRequest);
    }

但我必须发送 this 作为参数怎么做

{
  "jsonrpc": "2.0",
  "method": "signUp",
  "id": "1",
  "params": {
    "email": "abc@gmail.com",
    "fname": "abc",
    "lname": "def",
    "pwd": "123"

  }
}

我是否必须添加标题或任何其他方法请建议我。我是 android 开发的新手。

这是 postman chrome 扩展的屏幕截图

请帮帮我。

【问题讨论】:

  • 你得到解决方案了吗

标签: android json android-studio android-volley


【解决方案1】:
JsonObjectRequest jsObjRequest = new JsonObjectRequest
        (Request.Method.POST, url, json, new Response.Listener<JSONObject>() {

    @Override
    public void onResponse(JSONObject response) {

    }
}, new Response.ErrorListener() {

    @Override
    public void onErrorResponse(VolleyError error) {
        // TODO Auto-generated method stub

    }
});

您可以在 json 参数中使用上述代码发送您的 json。

【讨论】:

    【解决方案2】:

    试试

    JSONObject jsonObject1 = new JSONObject();
            try {
                jsonObject1.put("email", "abc@gmail.com");
                jsonObject1.put("fname", "abc");
                jsonObject1.put("lname", "def");
                jsonObject1.put("pwd", "123");
            } catch (JSONException e) {
                e.printStackTrace();
            }
    
        Map<String, String> postParam = new HashMap<>();
                postParam.put("jsonrpc", "2.0");
                postParam.put("method", "signUp");
                postParam.put("id", "1");
                postParam.put("params", jsonObject1.toString());
    
            CustomRequest jsObjRequest = new CustomRequest(
                    Request.Method.POST,
                    URL,
                    postParam, new Response.Listener<JSONObject>() {
                @Override
                public void onResponse(JSONObject response) {
                }
            }, new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError arg0) {
                }
            });
            mRequestQueue.add(jsObjRequest);
    

    快乐的代码

    【讨论】:

    • 能否解释一下为什么您的解决方案可以提高您贡献的价值?
    • 什么意思?
    • 仅代码答案可能会解决问题,但不会教育读者手头的问题。 尝试在您的回答中提及任何限制、假设或简化(摘自How do I write a good answer?
    【解决方案3】:
    import java.io.UnsupportedEncodingException;
    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 CustomRequest extends Request<JSONObject> {
    
    private Listener<JSONObject> listener;
    private Map<String, String> params;
    
    public CustomRequest(String url, Map<String, String> params,
            Listener<JSONObject> reponseListener, ErrorListener errorListener) {
        super(Method.GET, url, errorListener);
        this.listener = reponseListener;
        this.params = params;
    }
    
    public CustomRequest(int method, String url, Map<String, String> params,
            Listener<JSONObject> reponseListener, ErrorListener errorListener) {
        super(method, url, errorListener);
        this.listener = reponseListener;
        this.params = params;
    }
    
    protected Map<String, String> getParams()
            throws com.android.volley.AuthFailureError {
        return params;
    };
    
    @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));
        }
    }
    
    @Override
    protected void deliverResponse(JSONObject response) {
        // TODO Auto-generated method stub
        listener.onResponse(response);
    }
    

    }

    使用 CustomRequest 并在参数中传递您的地图。

    【讨论】:

    • Hashmap 可能不会作为 JSON 对象发送。
    【解决方案4】:

    将对象/模型/POJO 类发送到 volley post 请求的步骤。
    第 1 步:确保您的类应该是可解析的。
    第 2 步:覆盖模型类中的 toString 方法。
    第 3 步:创建地图,即
    Map<String, Object> params = new Map<String, Object> (); JSONObject object = new JSONObject(classObject.toString()) params.put("key", object)
    第 4 步:将参数放入 volley request 中。

    【讨论】:

      猜你喜欢
      • 2019-03-19
      • 1970-01-01
      • 1970-01-01
      • 2017-09-18
      • 2017-10-01
      • 2019-06-09
      • 2016-07-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多