Retrofit 回调函数在 Android 中未得到响应

Retrofit Callback function is not getting response in Android

亲爱的 Android 开发者您好! 我正在尝试使用改造从我的网络服务中获取数据。但是当我向我的网络服务发送调用时,回调函数总是显示 onFailure。

我很小心地创建了我的改装 类,但仍然无法获取数据。另外,我获得了互联网许可。

在这里你可以看到我的改装类:

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 但仍然没有看到任何异常的东西。

这是我的主要活动:

 @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
           public void onFailure(Call<PlaceCevap> call, Throwable t) {

               Toast.makeText(MainActivity.this, "fail" , Toast.LENGTH_SHORT).show();

           }
       });

因此,亲爱的开发人员,为什么我没有从 Web 服务获取数据?这是什么原因呢?请写出! 大家好,开发过程顺利!

我解决了问题。首先,我接受了这个错误“不支持 CLEARTEXT 通信”。 对于解决方案,您应该将 android:usesCleartextTraffic="true" 添加到清单文件中。

然后,您应该为“java.net.SocketException:套接字失败:EPERM”错误额外添加这些权限。

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />

将它们全部添加到清单文件中。

最后,您会收到“SSL 握手失败”错误。 你应该改变你的基地 url 像“http”或“https”试试他们两个。

如果您仍然遇到错误,请构建您的项目并从模拟器中删除您的应用程序,然后再次 运行 它。