親愛的 Android 開發人員,您好 我現在正試圖通過使用 retrofit 從我的網路服務中獲取資料。但是當我向我的 web 服務發送呼叫時,回呼函式總是顯示 onFailure。
我仔細地創建了我的 retrofit 類,但在獲取資料方面仍然有問題。此外,我還獲得了互聯網許可。
在這里你可以看到我的改造類:
import retrofit2.Retrofit。
import retrofit2.converter.gson.GsonConverterFactory;
public class RetrofitClient {
private static Retrofit retrofit = null;
public static Retrofit getClient(String baseUrl) {
if ( retrofit==null) {
retrofit = new Retrofit.Builder()
.baseUrl(baseUrl)
.addConverterFactory(GsonConverterFactory.create()
.build()。
}
return retrofit;
}
public class ApiUtils {
public static final String BASE_URL = "http://huseyinozkoc.com/";
//bu base link ana link olmal? alt kollar? interface i?erisinde belirtilir.。
public static RetrofitInterface getRetrofitInterface() {
return RetrofitClient.getClient(BASE_URL).create(RetrofitInterface.class)。
}
public interface RetrofitInterface{
@GET("turkey/get_All_details.php")
Call<PlaceCevap> getAllPlaces()。
}
正如我之前提到的,我檢查了所有的改裝類,但沒有發現任何問題。
然后我仔細檢查了我的MainActivity,但是仍然沒有看到任何例外。
這里是我的mainActivity:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState)。
setContentView(R.layout.activity_main) 。
recyclerView = findViewById(R.id.baba) 。
places = new ArrayList<>()。
recyclerView.setLayoutManager(new LinearLayoutManager(this. getApplicationContext()))。)
recyclerView.setHasFixedSize(true)。
placeInterface = ApiUtils.getRetrofitInterface();
placeInterface.getAllPlaces()。 enqueue(new Callback<PlaceCevap> () {
@Override
public void onResponse(Call<PlaceCevap> call, Response<PlaceCevap> response) {
places = response.body().getPlaces()。
adapter= new PlaceAdapter(places)。
recyclerView.setAdapter(adapter)。
Toast.makeText(MainActivity. this, "got response" , Toast.LENGTH_SHORT).show()。
}
@Override[/span].
public void onFailure(Call<PlaceCevap> call, Throwable t) {
Toast.makeText(MainActivity. this, "fail" , Toast.LENGTH_SHORT).show()。
}
});
結果,親愛的開發者,為什么我沒有從網路服務中獲得資料?這其中的原因是什么?請寫出來! 大家好,開發程序順利!
uj5u.com熱心網友回復:我解決了問題。首先,我發現這個錯誤 "不支持CLEARTEXT通信"。
為了解決這個問題,你應該在清單檔案中添加android:usesCleartextTraffic="true" 。
然后,你應該為 "java.net.SocketException: socket failed: EPERM "的錯誤。
<uses-permission android:name="android.permission.internet" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/span> />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/span> />
將它們全部加入清單檔案中。
最后,你會得到 "SSL握手失敗 "的錯誤。 你應該改變你的基本網址,如 "http "或 "https",試試這兩個網址。
如果你仍然得到錯誤,請建立你的專案并從模擬器中洗掉你的應用程式,然后再次運行它。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/312413.html
標籤:
