改装2没有拨打电话

改装2没有拨打电话

问题描述:

我已经安装改装2.1,它并没有打电话给我的API。我只是安装了一盏灯,让我的ip可以公开访问。我试图通过POST发送信息到我的PHP脚本,这会将数据添加到我的数据库。出于某种原因,改造不会对我的API进行调用......我不确定我做错了什么。改装2没有拨打电话

@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,它也可以。我必须错过一些非常小的事情......

+0

您需要在调用对象上调用其中一种阻塞或非阻塞方法。 –

+0

@ MLProgrammer-CiM喜欢入队? – cj1098

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

这条线是不够的。 Call<T>对象表示调用的“意图”而不是操作本身,您需要通过调用对象上的两种方法之一来执行它:执行入队

在阻塞的方式执行工程,并回报JSONObject通过response.getBody()方法:

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

排队异步工作,并会提供你JSONObject通过callback对象 - 如果调用成功,onResponse将调用您的response作为调用参数。

​​
+0

看我的编辑。我已经说过了,我忘了把它放在我原来的问题中。它已被编辑。我还应该提到我不想从这篇文章中获取数据。这完全是发送数据存储在数据库中。 – cj1098

+0

结束了解​​决它。显然,Retrofit 2不能很好地与JsonObjects一起作为请求体。您可以发送POJO,它将成为JSON对象,但不能使用JSONOject。 :) – cj1098

+0

也许使用gson的JsonObject和GsonConverterFactory,或者只是使用POJO,如果你的json足够简单 –