Так что мое приложение работает нормально, используя API 26
Но когда я использую эмулятор API 29, я получаю это.
Должен ли я проверить настройки эмулятора? Inte rnet работает нормально.
Вы можете скачать приложение, если хотите, из магазина игр , чтобы проверить его самостоятельно
Для загрузки данных я использую загрузчики. Если идентификатор загрузчика нулевой, я вызываю метод showError
.
public class NewsFragment extends Fragment implements LoaderManager.LoaderCallbacks<Object>, NewsAdapter.ListItemClickListener{
private Boolean isVisible;
private static final String LOG_TAG = NewsFragment.class.getName();
private static final int NEWS_LOADER_ID = 0;
private String newsUrl;
@BindView(R.id.news_recycler_view)
RecyclerView mRecyclerView;
private NewsAdapter adapter;
@BindView(R.id.errorTextView)
TextView errorTextView;
private static final String ARRAY_LIST = "list_view";
private ArrayList<News> newsArrayList;
private static final String LAYOUT_STATE = "USATodayFragment.recycler.layout";
private String newsTitlesToJson;
Unbinder unbinder;
public static NewsFragment newInstance(String newsUrl){
Bundle bundle = new Bundle();
bundle.putString("url", newsUrl);
NewsFragment fragment = new NewsFragment();
fragment.setArguments(bundle);
return fragment;
}
private void readBundle(Bundle bundle) {
if (bundle != null) {
newsUrl = bundle.getString("url");
}
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View v = inflater.inflate(R.layout.common_fragment_layout, container, false);
unbinder = ButterKnife.bind(this, v);
if(savedInstanceState == null) {
newsArrayList = new ArrayList<>();
readBundle(getArguments());
LinearLayoutManager manager = new LinearLayoutManager(getActivity());
mRecyclerView.setLayoutManager(manager);
mRecyclerView.setHasFixedSize(true);
mRecyclerView.addItemDecoration(new SimpleDividerItemDecoration(getActivity()));
adapter = new NewsAdapter(getActivity(),newsArrayList,this);
mRecyclerView.setAdapter(adapter);
getLoaderManager().initLoader(NEWS_LOADER_ID, null, this);
//UpdateNewsWidgetService.startBakingService(getContext(), (ArrayList<News>) newsArrayList);
}else{
newsArrayList = savedInstanceState.getParcelableArrayList(ARRAY_LIST);
readBundle(getArguments());
errorTextView = v.findViewById(R.id.errorTextView);
mRecyclerView = v.findViewById(R.id.news_recycler_view);
LinearLayoutManager manager = new LinearLayoutManager(getActivity());
mRecyclerView.setLayoutManager(manager);
mRecyclerView.setHasFixedSize(true);
mRecyclerView.addItemDecoration(new SimpleDividerItemDecoration(getActivity()));
adapter = new NewsAdapter(getActivity(),newsArrayList,this);
mRecyclerView.setAdapter(adapter);
//UpdateNewsWidgetService.startBakingService(getContext(), (ArrayList<News>) newsArrayList);
}
return v;
}
@Override
public Loader onCreateLoader(int id, Bundle args) {
return new GenericLoader(getActivity(),newsUrl);
}
@Override
public void onLoaderReset(Loader<Object> loader) {
}
@Override
public void onLoadFinished(Loader<Object> loader, Object data) {
int id = loader.getId();
if(id == NEWS_LOADER_ID){
newsArrayList = (ArrayList<News>)data;
if(newsArrayList !=null && !newsArrayList.isEmpty()){
adapter.clear();
adapter.setNewsData(newsArrayList);
}else{
showError();
}
}
} ...
private void showError(){
mRecyclerView.setVisibility(View.GONE);
errorTextView.setVisibility(View.VISIBLE);
}