Дооснащение сообщением об ошибке «Нет интернета», даже если телефон подключен к интернету. - PullRequest
0 голосов
/ 19 мая 2019

Я использую библиотеку для дооснащения, чтобы загрузить JSON и обработать ее с помощью GSON, чтобы показать результаты в программе повторного просмотра.Однако некоторые из моих пользователей жалуются, что они получают ошибку «нет интернета», даже когда они подключены к сети.Кто-нибудь может указать, что мне не хватает в моем коде.Заранее спасибо.

Вот мой код API.

public class BhartiAPI {
public static final String url = "https://www.ddbharat.com/api/";

public static PostService postService = null;

public static PostService getService() {

    if(postService == null) {

        OkHttpClient okHttpClient = new OkHttpClient.Builder()
                .readTimeout(60, TimeUnit.SECONDS)
                .connectTimeout(60 / 2, TimeUnit.SECONDS)
                .writeTimeout(60, TimeUnit.SECONDS)
                .cache(null)
                .build();

        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl(url)
                .client(okHttpClient)
                .addConverterFactory(GsonConverterFactory.create())
                .build();

        postService = retrofit.create(PostService.class);
    }
    return postService;
}

public interface PostService {
    @Headers("Cache-Control: no-cache")
    @POST
    Call<PostList> getPostList(@Url String url);
}

И вот как я его называю.

final String url = BhartiAPI.url + fileName;
final Call<PostList> postList = BhartiAPI.getService().getPostList(url);

postList.enqueue(new Callback<PostList>() {
        @SuppressLint("ResourceType")
        @Override
        public void onResponse(Call<PostList> call, Response<PostList> response) {

            if (response.isSuccessful()) {
                noNet.setVisibility(View.GONE);
                list = response.body();
                items.addAll(list.getItems());
                adapter.notifyDataSetChanged();
                progressBar.setVisibility(View.GONE);

            } else {
                // error case
                switch (response.code()) {
                    case 404:
                        getData2("news");
                        break;
                    case 500:
                        getData2("news");
                        break;
                    default:
                        getData2("news");
                        break;
                }
            }
        }

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

            if (t instanceof UnknownHostException) {
                noNet.setVisibility(View.VISIBLE);
            } else if (t instanceof IOException) {
                noNet.setVisibility(View.GONE);
            } else {
                noNet.setVisibility(View.GONE);
            }
            getData2("news");

        }
    });

Здесь иногда это 'if (tinstanceof UnknownHostException) 'вызывается снова и снова, даже когда интернет подключен и работает нормально.

1 Ответ

1 голос
/ 19 мая 2019

Я часто получаю эту ошибку, когда меняю интернет-соединения на своем устройстве и запускаю одно и то же приложение на нескольких соединениях. Для меня решение состоит в том, чтобы запустить «Invalidate Cache and Restart» в Android Studio.

...