Retrofit 2没有拨打电话

时间:2016-11-28 00:38:14

标签: android retrofit2

我已经设置了改装2.1,它根本没有打电话给我的api。我只是设置了一个灯堆,让我的ip可以公开访问。我正在尝试通过POST将信息发送到我的php脚本,这会将数据添加到我的数据库中。出于某种原因,改造不会打电话给我的api ......我不确定我做错了什么。

@POST("/sendInformation.php")
Call<JSONObject> sendUserInfo(@Body JSONObject userViewModel);



OkHttpClient.Builder client = new OkHttpClient.Builder();
        HttpLoggingInterceptor logging = new HttpLoggingInterceptor(message -> Log.d(TAG, message));
        logging.setLevel(HttpLoggingInterceptor.Level.BASIC);
        client.addInterceptor(logging);

        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl(BASE_URL)
                .client(client.build())
                .addConverterFactory(JacksonConverterFactory.create())
                .build();

        UserInformationService userService = retrofit.create(UserInformationService.class);


        Call<JSONObject> call = userService.sendUserInfo(jsonObject);
        call.enqueue(new Callback<JSONObject>() {
            @Override
            public void onResponse(Call<JSONObject> call, Response<JSONObject> response) {
                Toast.makeText(HomeActivity.this, response.body().toString(), Toast.LENGTH_SHORT).show();
            }

            @Override
            public void onFailure(Call<JSONObject> call, Throwable t) {

            }
        });

我尝试添加日志记录,但它不会拨打电话,所以我甚至看不到日志记录。有人有什么想法吗?

编辑:我使用的BASE_URL是我的公共IP。我只是转发我的端口,以便它可以访问。我尝试在hurl.it上做一个POST,它运行正常。这只是改造不起作用。我也用asyncTask和httpURLConnection尝试了这个,它也有效。我一定错过了一些非常小的东西......

1 个答案:

答案 0 :(得分:2)

Call<JSONObject> call = userService.sendUserInfo(jsonObject);

这条线还不够。 Call<T>对象代表&#39;意图&#39;调用而不是操作本身,你需要通过调用对象中的两个方法之一来执行它:执行入队

执行以阻止方式运作,并通过JSONObject方法返回您的response.getBody()

Response<JSONObject> response = call.execute();

排队以异步方式工作,并通过JSONObject对象提供callback - 如果调用成功,将使用{{1}调用onResponse方法作为调用参数。

response