2016-09-25 99 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