2017-12-22 16 views
0

herokuノードサーバーにパラメータを転送するためにOKHTTP 3を使用する際に問題があります。OKHTTP 3リクエストポストパラメータがHerokuのノードサーバーに転送されない

これはPostmanとは正常に動作しますが、Android Appは動作しません。

  • アンドロイドコード(パラメータが下部に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のログ enter image description here

  • ポストマン(パラメータが定義されている) enter image description here

  • 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); 
         ... .... .... 
    
        }); 
    

答えて

0

私は多くのことを研究した後、この問題を自分で解決します。

アメージング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); 
関連する問題