2016-09-25 18 views
0

アンドロイドアプリからペットプロジェクトのエンドポイントでPOSTコールをしようとしています。Android Volley POST ServerError

私はvolleyライブラリを使用しています。このエラーはcom.android.volley.ServerErrormessageとしてNULLです。 <uses-permission android:name="android.permission.INTERNET" />

また、私のエンドポイントは、テストのためにカールを介してアクセス可能である:私は私のマニフェストのインターネット接続オプションを与えている確保している

を(私は私が間違っているのかを把握しようと苦労しています)

curl -X POST -H "Content-Type: application/json" -H "Cache-Control: no-cache" -H "Postman-Token: 122eedf5-8ca5-c1a6-06d9-5cc1986d2b23" -d '{ 
    "departure_time" : "2016-07-21 07:00:00", 
    "arrival_time" : "2016-07-21 08:30:00", 
    "location_flow": ["Milpitas+ca", "SanCarlos+Ca"], 
    "buffer_time": [0, 30, 0], 
    "mode": "driving" 
}' "https://sudtrafficalarm.herokuapp.com/v1/wakecheck" 

出力:

{ 
    "estimated_arrival_time": "2016-07-21 08:05:01", 
    "journey_duration": 2101, 
    "wake_status": false 
} 

これは私の主な活動です:

package com.sudhishkr.sudtrafficalarmandroid; 

import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Button; 
import android.widget.Toast; 

import com.android.volley.AuthFailureError; 
import com.android.volley.Request; 
import com.android.volley.RequestQueue; 
import com.android.volley.Response; 
import com.android.volley.VolleyError; 
import com.android.volley.toolbox.JsonObjectRequest; 
import com.android.volley.toolbox.StringRequest; 
import com.android.volley.toolbox.Volley; 

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

import java.util.HashMap; 
import java.util.Map; 

public class MainActivity extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     final RequestQueue queue = Volley.newRequestQueue(this); 
     Button button = (Button) findViewById(R.id.button); 

     button.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 
       //Toast.makeText(MainActivity.this, SystemTime.date2String(SystemTime.getCurrentTime()), Toast.LENGTH_SHORT).show(); 
       final String REGISTER_URL = "https://sudtrafficalarm.herokuapp.com/v1/wakecheck"; 
       JsonObjectRequest jsonRequest = new JsonObjectRequest(Request.Method.POST, REGISTER_URL, getJsonData(), 
         new Response.Listener<JSONObject>() { 
          @Override 
          public void onResponse(JSONObject response) { 
           Toast.makeText(MainActivity.this, response.toString(), Toast.LENGTH_SHORT).show(); 
          } 
         }, 
         new Response.ErrorListener() { 
          @Override 
          public void onErrorResponse(VolleyError error) { 
           Toast.makeText(MainActivity.this, error.toString(), Toast.LENGTH_SHORT).show(); 
          } 
         } 
       ); 
       queue.add(jsonRequest); 


      } 
     }); 
    } 

    public JSONObject getJsonData() { 
     JSONObject params = new JSONObject(); 
     try { 
      params.put("departure_time", "2016-07-21 07:00:00"); 
      params.put("arrival_time", "2016-07-21 08:30:00"); 
      params.put("mode", "driving"); 
      JSONArray address = new JSONArray(); 
      address.put("Milpitas+ca"); 
      address.put("SanCarlos+Ca"); 
      params.put("location_flow", address); 
     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 
     return params; 
    } 


} 

コードのデバッグ - 私をここに連れて行きます。そして、なぜこのようなことが起こるのかに関するメッセージや情報はありません。

enter image description here

+0

私はそれが接続の問題であるべきだと思うあなたのURLを確認してください –

+0

カールを働いています@ JininKuriakose、なぜ私は私のエンドポイントを与えたthats働いています。 – sudhishkr

答えて

1

あなたは、あなたのAndroidのコード内で 'buffer_time' パラメータを追加していません。 curlリクエストを参照してください。POSTデータは、Androidコードから送信したものとは異なります。 あなたgetJsonDataは、()(私はデモプロジェクトを作成し、変更を加えて、私が予想される応答を見ることができます)、以下のようになります。

public JSONObject getJsonData() { 
    JSONObject params = new JSONObject(); 
    try { 
     params.put("departure_time", "2016-07-21 07:00:00"); 
     params.put("arrival_time", "2016-07-21 08:30:00"); 
     params.put("mode", "driving"); 
     JSONArray address = new JSONArray(); 
     address.put("Milpitas+ca"); 
     address.put("SanCarlos+Ca"); 
     params.put("location_flow", address); 

     JSONArray buffer_time = new JSONArray(); 
     buffer_time.put(0); 
     buffer_time.put(30); 
     buffer_time.put(0); 
     params.put("buffer_time", buffer_time); 
    } catch (JSONException e) { 
     e.printStackTrace(); 
    } 
    return params; 
} 
1

私はあなたがメインスレッドで呼び出されると仮定バックグラウンドスレッドでトーストを印刷しようとしているので、それが起こっていると思います。考えられる理由は、バックグラウンドスレッドでネットワーク操作が常に発生するため、apiのコールバックメソッドがバックグラウンドスレッドで呼び出される可能性があります。

使用この更新されたコード

button.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
      //Toast.makeText(MainActivity.this, SystemTime.date2String(SystemTime.getCurrentTime()), Toast.LENGTH_SHORT).show(); 
      final String REGISTER_URL = "https://sudtrafficalarm.herokuapp.com/v1/wakecheck"; 
      JsonObjectRequest jsonRequest = new JsonObjectRequest(Request.Method.POST, REGISTER_URL, getJsonData(), 
        new Response.Listener<JSONObject>() { 
         @Override 
         public void onResponse(JSONObject response) { 
          runOnUiThread(new Runnable() { 
           @Override 
           public void run() { 
            Toast.makeText(MainActivity.this, response.toString(), Toast.LENGTH_SHORT).show();   
           } 
          }); 

         } 
        }, 
        new Response.ErrorListener() { 
         @Override 
         public void onErrorResponse(VolleyError error) { 
          runOnUiThread(new Runnable() { 
           @Override 
           public void run() { 
            Toast.makeText(MainActivity.this, error.toString(), Toast.LENGTH_SHORT).show();   
           } 
          }); 

         } 
        } 
      ); 
      queue.add(jsonRequest); 


     } 
    }); 
+0

実際には私のペイロードにパラメータがないという問題がありました。 – sudhishkr

関連する問題