Вот код MainActivity
public class NewsActivity extends AppCompatActivity
implements LoaderManager.LoaderCallbacks<List<News>>,
SharedPreferences.OnSharedPreferenceChangeListener {
SwipeRefreshLayout mSwipeRefreshLayout;
private static final String LOG_TAG = NewsActivity.class.getName();
private static final String NEWS_REQUEST_URL =
"https://newsapi.org/v1/articles;
private static final int NEWS_LOADER_ID = 1;
private NewsAdapter mAdapter;
private TextView mEmptyStateTextView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_news);
mSwipeRefreshLayout = (SwipeRefreshLayout) findViewById(R.id.swipeToRefresh);
ListView newsListView = (ListView) findViewById(R.id.list);
mEmptyStateTextView = (TextView) findViewById(R.id.empty_view);
newsListView.setEmptyView(mEmptyStateTextView);
mAdapter = new NewsAdapter(this, new ArrayList<News>());
newsListView.setAdapter(mAdapter);
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
prefs.registerOnSharedPreferenceChangeListener(this);
mSwipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
mSwipeRefreshLayout.setRefreshing(false);
}
});
newsListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) {
News currentNews = mAdapter.getItem(position);
Uri newsUri = Uri.parse(currentNews.getUrl());
Intent websiteIntent = new Intent(Intent.ACTION_VIEW, newsUri);
startActivity(websiteIntent);
}
});
ConnectivityManager connMgr = (ConnectivityManager)
getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = connMgr.getActiveNetworkInfo();
if (networkInfo != null && networkInfo.isConnected()) {
LoaderManager loaderManager = getLoaderManager();
loaderManager.initLoader(NEWS_LOADER_ID, null, this);
} else {
View loadingIndicator = findViewById(R.id.loading_indicator);
loadingIndicator.setVisibility(View.GONE);
mEmptyStateTextView.setText(R.string.no_internet_connection);
}
}
public void onSharedPreferenceChanged(SharedPreferences prefs, String key) {
if (key.equals(getString(R.string.settings_webtitle_default))) {
mAdapter.clear();
mEmptyStateTextView.setVisibility(View.GONE);
View loadingIndicator = findViewById(R.id.loading_indicator);
loadingIndicator.setVisibility(View.VISIBLE);
getLoaderManager().restartLoader(NEWS_LOADER_ID, null, this);
}
}
@Override
public Loader<List<News>> onCreateLoader(int id, Bundle args) {
SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(this);
String webTitle = sharedPrefs.getString(
getString(R.string.webtitle),
getString(R.string.settings_webtitle_key));
String webImage = sharedPrefs.getString(
getString( R.string.query_webimage ),
getString( R.string.settings_webimage_key ));
Uri baseUri = Uri.parse(NEWS_REQUEST_URL);
Uri.Builder uriBuilder = baseUri.buildUpon();
uriBuilder.appendQueryParameter("format", "json");
uriBuilder.appendQueryParameter("limit", "10");
uriBuilder.appendQueryParameter("webtitLe", webTitle);
uriBuilder.appendQueryParameter( "webimage", webImage);
return new NewsLoader(this, uriBuilder.toString());
}
@Override
public void onLoadFinished(Loader<List<News>> loader, List<News> news) {
View loadingIndicator = findViewById( R.id.loading_indicator );
loadingIndicator.setVisibility( View.GONE );
mEmptyStateTextView.setText( R.string.no_news );
mAdapter.clear();
mAdapter.addAll(news);
}
@Override
public void onLoaderReset(Loader<List<News>> loader) {
mAdapter.clear();
}
}
Теперь общие настройки не работают.Я хочу, чтобы приложение сохраняло данные локально и отображало их, даже когда нет подключения к Интернету.Я также использую NewsAdapter и NewsLoader.
Мне нужна помощь с локальным сохранением данных.Когда нет подключения к Интернету, я получаю свое собственное уведомление «R.string.no_internet_connection», но я бы предпочел загружать новости, которые уже показывались ранее.
Спасибо!