2016-11-28 65 views
0

我已經安裝改裝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

回答

1
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足夠簡單 –