2016-09-25 92 views
0

我想從我的android應用程序的寵物項目的端點上進行POST調用。Android Volley POST ServerError

我正在使用volley庫,我正在輸入此錯誤:com.android.volley.ServerErrormessageNULL。 (我有一個困難時期試圖找出什麼我做錯了)

我已確保我在我的表現給予互聯網連接選項:<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

我認爲這應該是一個連接問題,請檢查您的網址是工作 –

+0

捲曲在@JithinKuriakose工作,這就是爲什麼我給了我的端點。 – sudhishkr

回答

1

。 查看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的回調方法將在後臺線程中調用,因爲網絡操作總是發生在後臺線程中。

使用你還沒有添加在你的Android代碼 'buffer_time' 參數此更新的代碼

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