如何在android中使用改造到服务器来发出POST请求

时间:2014-09-25 06:44:29

标签: java android node.js retrofit

我正在使用android中的retrofit向我在Node.js中创建的服务器发出POST请求。我已经处理了GET请求并且工作正常但是当我发帖请求时我无法获取数据。

我的守则如下: 的 DataService.java

public class DataService extends Service{
  private final class ServiceHandler extends Handler {
    public ServiceHandler(Looper looper) {
        super(looper);
    }

    @Override
    public void handleMessage(Message msg) {
        try {           
            computeDistance(startLocation);           
        } catch (Exception e) {
            e.printStackTrace();
        }
        stopSelf(msg.arg1);
    }

 public void computeDistance(String endLocation){
       RestAdapter restAdapter = new RestAdapter.Builder()
                .setEndpoint(Constants.Http.URL_BASE)
                .setLogLevel(RestAdapter.LogLevel.FULL)
                .build();

        ApiService cityService = restAdapter.create(ApiService.class);
        cityService.updateCityData();
    }
  }
}

我定义了如下界面:
ApiService.java

public interface ApiService {

    @POST("/city/update")
    public String updateCityData();
}

我的Node.js文件如下:

function updateDBData(req, res, next) {
    console.log('Entered into the UpdateDBDATa');
    var sapi = {"data": "false"};
    res.send(200, sapi).end();
}

/**-------- creating a server --------**/
var server = restify.createServer({name: 'crunchbase'});
server.get('/city/:name', updateDBData);
/**------- server listening port -------**/
server.listen(appContext.port, function () {
  console.log('%s listening at %s', server.name, server.url);
});

当我使用调用Node.js服务器时 http://www.api.com:8084/search/update 我收到了控制台上打印的消息。但是当我通过android进行改装请求时,我得到的错误就像

  D/Retrofit﹕ <--- HTTP 405 http://www.api.com:8084/city/update (439ms)<br>
    D/Retrofit﹕ : HTTP/1.1 405 Method Not Allowed<br>
    D/Retrofit﹕ Access-Control-Allow-Headers: Accept, Accept-Version, Content-Length, Content-MD5 , Content-Type, Date, X-Api-Version<br>
    D/Retrofit﹕ Access-Control-Allow-Methods: GET<br>
    D/Retrofit﹕ Access-Control-Allow-Origin: *<br>
    D/Retrofit﹕ {"code":"BadMethod","message":"/city/update does not support POST"}
    D/Retrofit﹕ <--- END HTTP (67-byte body)

我无法确定错误是什么以及如何解决。

1 个答案:

答案 0 :(得分:2)

看起来问题出在服务器端(您不支持发布请求)。

尝试通过添加类似

的内容来支持它
server.post('/city/:name', updateDBData);

之前

server.listen