【问题标题】:OKHTTP 3 request post params not transfer into Node server on HerokuOKHTTP 3 请求发布参数未传输到 Heroku 上的节点服务器
【发布时间】:2017-12-22 17:28:42
【问题描述】:

我在使用 OKHTTP 3 将参数传输到 heroku 节点服务器时遇到问题。

它可以在 Postman 中正常运行,但不能在 Android 应用程序中运行。

  • Android 代码(底部的 Heroku 日志中未定义参数)

    public void makePayment(String phone, String token, String type, double amount, final ResultListener listener){
    
        RequestBody requestBody = new MultipartBody.Builder().setType(MultipartBody.FORM)
                .setType(MultipartBody.FORM)
                .addFormDataPart("phoneNumber", phone)
                .addFormDataPart("serviceType", type)
                .addFormDataPart("stripeToken", token)
                .addFormDataPart("serviceCost", String.valueOf(amount))
                .build();
    
        final Request request = new Request.Builder()
                .url(Const.URL_HEROKU_BASE+"payment/charge")
                .post(requestBody)
                .build();
    
        client.newCall(request).enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                if (listener != null) {
                    listener.onResponse(false, e.getLocalizedMessage());
                }
            }
    
            @Override
            public void onResponse(Call call, Response response) throws IOException {
                if (listener != null) {
                    listener.onResponse(true, response.body().string());
                }
            }
        });
    }
    

    heroku 日志

  • 邮递员(参数已定义)

  • Heroku 节点服务器(调试)

    router.post('/charge', (req, res, next) => {
    
        const phoneNumber = req.body.phoneNumber;
        const serviceType = req.body.serviceType;
        const stripeToken = req.body.stripeToken;
        const serviceCost = req.body.serviceCost;
    
        console.log('phoneNumber : ' + phoneNumber);
        console.log('serviceType : ' + serviceType);
        console.log('stripeToken : ' + stripeToken);
        console.log('serviceCost : ' + serviceCost);
             ... .... ....
    
      });
    

【问题讨论】:

    标签: android node.js heroku http-post okhttp3


    【解决方案1】:

    经过大量研究,我自己解决了这个问题。

    了不起的Volley(Android 轻松快速网络)确实从here 帮助我解决了这个问题。

        String url = Const.URL_HEROKU_BASE + "payment/charge";
    
        final Map<String, String> params = new HashMap();
        params.put("phoneNumber", phone);
        params.put("stripeToken", token);
        params.put("serviceType", type);
        params.put("serviceCost", String.valueOf(amount));
    
        RequestQueue queue = Volley.newRequestQueue(context);
    
        StringRequest strRequest = new StringRequest(Request.Method.POST, url,
                new Response.Listener<String>()
                {
                    @Override
                    public void onResponse(String response)
                    {
                        Toast.makeText(context, response, Toast.LENGTH_SHORT).show();
                    }
                },
                new Response.ErrorListener()
                {
                    @Override
                    public void onErrorResponse(VolleyError error)
                    {
                        Toast.makeText(context, error.toString(), Toast.LENGTH_SHORT).show();
                    }
                })
        {
            @Override
            protected Map<String, String> getParams()
            {
                return params;
            }
        };
    
        queue.add(strRequest);
    

    【讨论】:

      猜你喜欢
      • 2019-04-08
      • 2016-08-17
      • 2019-09-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多