OkHttp Post没有在服务器端发送数据

时间:2017-07-22 17:56:20

标签: java android post okhttp

我正在尝试使用OKHTTP库向服务器发送令牌,但我没有收到应用程序发送的帖子请求。

我已经在我的清单中添加了互联网许可。

private void registerToken(String token) {

        final OkHttpClient client = new OkHttpClient();

        RequestBody formBody = new FormBody.Builder()
                .add("token", token)
                .build();

        Request request = new Request.Builder()
                .url("http://####/push_notifcation/index.php")
                .post(formBody)
                .build();

        try {
            Response response = client.newCall(request).execute();

            Log.i(TAG, "ok");
            Log.i(TAG, response.message());
        } catch (IOException e) {
            e.printStackTrace();

            Log.i(TAG, e.getMessage());
            Log.i(TAG, "nok");
        }
    }

服务器

if(isset($_POST["token"])){
    $token = $_POST["token"];

    $db_data = $database->insert("tokens", [
        "token" => $token
    ]);
}

2 个答案:

答案 0 :(得分:1)

您的代码看起来正确,因此需要更多信息。根据提供的内容,我最好的猜测是将http重定向到https,并且可能会丢失POST主体或其他内容。

一种帮助调试的方法是添加一个记录HTTP请求的NetworkInterceptor,以便您可以深入了解实际发生的情况。这是一个配置OkHttpClient logging

的可运行示例
Logger logger = LoggerFactory.getLogger(HttpUtil.class);
HttpLoggingInterceptor logging =
    new HttpLoggingInterceptor((msg) -> {
        logger.debug(msg);
    });
logging.setLevel(Level.BODY);

client.addNetworkInterceptor(logging);

如果您可以将调试输出添加到您的问题中,我们可以深入了解如果http没有问题 - > https重定向。

只需注释OkHttpClient是线程安全的,并且可供许多线程使用。让一个OkHttpClient重用(按照特定配置)是一种很好的做法。您可以使静态实例或依赖项将其注入。每个方法调用创建一个将有开销。

答案 1 :(得分:0)

试试这个

public static void send(JSONObject obj){
    new OkHttpClient().newCall(new Request.Builder()
            .addHeader("Content-Type", "application/json")
            .url("URL...")
            .post(RequestBody.create(
                    MediaType.parse("application/json; charset=utf-8"),
                    obj.toString())
            ).build())
    .enqueue(new Callback() {
        @Override
        public void onFailure(Call call, IOException e) {
            Log.d("ZAKA",e.getMessage());
        }
        @Override
        public void onResponse(Call call, Response response) throws IOException {
            Log.d("ZAKA","Report : -> "+response.body().string());
        }
    });
}

然后调用它

JSObject obj = new JSObject();
obj.put("token","your token");
send(obj); // Call send method