public class JsonLoader extends AsyncTaskLoader<JSONArray> {
private String url;
public JsonLoader(Context context, String url) {
super(context);
this.url = url;
}
@Override
public JSONArray loadInBackground() {
JSONArray result = null;
try {
// ...
// result = ...
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
@Override
public void deliverResult(JSONArray data) {
if (isReset()) {
return;
}
if (isStarted()) {
super.deliverResult(data);
}
}
@Override
protected void onStartLoading() {
if (takeContentChanged()) {
forceLoad();
}
}
@Override
protected void onStopLoading() {
cancelLoad();
}
@Override
protected void onReset() {
onStopLoading();
}
}
public class MyActivity extends AppCompatActivity implements LoaderManager.LoaderCallbacks<JSONArray> {
private RecyclerView recyclerView;
private MyAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my);
recyclerView = findViewById(R.id.recyclerView);
adapter = new MyAdapter();
getSupportLoaderManager().initLoader(1, null, this);
}
@NonNull
@Override
public Loader<JSONArray> onCreateLoader(int id, @Nullable Bundle args) {
return new JsonLoader(this, "https://example.com/data.json");
}
@Override
public void onLoadFinished(@NonNull Loader<JSONArray> loader, JSONArray data) {
adapter.setData(data);
recyclerView.setAdapter(adapter);
}
@Override
public void onLoaderReset(@NonNull Loader<JSONArray> loader) {
adapter.setData(null);
}
}