OKHTTP 3请求post params不会传输到Heroku上的Node服务器
我使用OKHTTP 3将参数传输到heroku节点服务器时遇到麻烦。
它适用于Postman,但不适用于Android App。
- 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); ... .... .... });
经过大量的研究,我自己解决了这个问题。
惊人的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);
OKHTTP 3请求post params不会传输到Heroku上的Node服务器
我使用OKHTTP 3将参数传输到heroku节点服务器时遇到麻烦。
它适用于Postman,但不适用于Android App。
- 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); ... .... .... });
经过大量的研究,我自己解决了这个问题。
惊人的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);