mirror of
https://github.com/Docile-Alligator/Infinity-For-Reddit.git
synced 2026-03-30 03:27:29 +00:00
Use Executor instead of AsyncTask in ParseMultiReddit.
This commit is contained in:
@ -133,8 +133,8 @@ public class CreateMultiRedditActivity extends BaseActivity {
|
||||
if (!accountName.equals(Account.ANONYMOUS_ACCOUNT)) {
|
||||
String jsonModel = new MultiRedditJSONModel(binding.multiRedditNameEditTextCreateMultiRedditActivity.getText().toString(), binding.descriptionEditTextCreateMultiRedditActivity.getText().toString(),
|
||||
binding.visibilityChipCreateMultiRedditActivity.isChecked(), mSubreddits).createJSONModel();
|
||||
CreateMultiReddit.createMultiReddit(mOauthRetrofit, mRedditDataRoomDatabase, accessToken,
|
||||
"/user/" + accountName + "/m/" + binding.multiRedditNameEditTextCreateMultiRedditActivity.getText().toString(),
|
||||
CreateMultiReddit.createMultiReddit(mExecutor, mHandler, mOauthRetrofit, mRedditDataRoomDatabase,
|
||||
accessToken, "/user/" + accountName + "/m/" + binding.multiRedditNameEditTextCreateMultiRedditActivity.getText().toString(),
|
||||
jsonModel, new CreateMultiReddit.CreateMultiRedditListener() {
|
||||
@Override
|
||||
public void success() {
|
||||
|
||||
@ -436,22 +436,23 @@ public class SubscribedThingListingActivity extends BaseActivity implements Acti
|
||||
|
||||
private void loadMultiReddits() {
|
||||
if (!accountName.equals(Account.ANONYMOUS_ACCOUNT)) {
|
||||
FetchMyMultiReddits.fetchMyMultiReddits(mOauthRetrofit, accessToken, new FetchMyMultiReddits.FetchMyMultiRedditsListener() {
|
||||
@Override
|
||||
public void success(ArrayList<MultiReddit> multiReddits) {
|
||||
InsertMultireddit.insertMultireddits(mExecutor, new Handler(), mRedditDataRoomDatabase, multiReddits, accountName, () -> {
|
||||
mInsertMultiredditSuccess = true;
|
||||
sectionsPagerAdapter.stopMultiRedditRefreshProgressbar();
|
||||
});
|
||||
}
|
||||
FetchMyMultiReddits.fetchMyMultiReddits(mExecutor, mHandler, mOauthRetrofit, accessToken,
|
||||
new FetchMyMultiReddits.FetchMyMultiRedditsListener() {
|
||||
@Override
|
||||
public void success(ArrayList<MultiReddit> multiReddits) {
|
||||
InsertMultireddit.insertMultireddits(mExecutor, new Handler(), mRedditDataRoomDatabase, multiReddits, accountName, () -> {
|
||||
mInsertMultiredditSuccess = true;
|
||||
sectionsPagerAdapter.stopMultiRedditRefreshProgressbar();
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void failed() {
|
||||
mInsertMultiredditSuccess = false;
|
||||
sectionsPagerAdapter.stopMultiRedditRefreshProgressbar();
|
||||
Toast.makeText(SubscribedThingListingActivity.this, R.string.error_loading_multi_reddit_list, Toast.LENGTH_SHORT).show();
|
||||
}
|
||||
});
|
||||
@Override
|
||||
public void failed() {
|
||||
mInsertMultiredditSuccess = false;
|
||||
sectionsPagerAdapter.stopMultiRedditRefreshProgressbar();
|
||||
Toast.makeText(SubscribedThingListingActivity.this, R.string.error_loading_multi_reddit_list, Toast.LENGTH_SHORT).show();
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -25,7 +25,8 @@ public class CreateMultiReddit {
|
||||
void failed(int errorType);
|
||||
}
|
||||
|
||||
public static void createMultiReddit(Retrofit oauthRetrofit, RedditDataRoomDatabase redditDataRoomDatabase,
|
||||
public static void createMultiReddit(Executor executor, Handler handler, Retrofit oauthRetrofit,
|
||||
RedditDataRoomDatabase redditDataRoomDatabase,
|
||||
String accessToken, String multipath, String model,
|
||||
CreateMultiRedditListener createMultiRedditListener) {
|
||||
Map<String, String> params = new HashMap<>();
|
||||
@ -36,18 +37,18 @@ public class CreateMultiReddit {
|
||||
@Override
|
||||
public void onResponse(@NonNull Call<String> call, @NonNull Response<String> response) {
|
||||
if (response.isSuccessful()) {
|
||||
ParseMultiReddit.parseAndSaveMultiReddit(response.body(), redditDataRoomDatabase,
|
||||
new ParseMultiReddit.ParseMultiRedditListener() {
|
||||
@Override
|
||||
public void success() {
|
||||
createMultiRedditListener.success();
|
||||
}
|
||||
ParseMultiReddit.parseAndSaveMultiReddit(executor, handler, response.body(),
|
||||
redditDataRoomDatabase, new ParseMultiReddit.ParseMultiRedditListener() {
|
||||
@Override
|
||||
public void success() {
|
||||
createMultiRedditListener.success();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void failed() {
|
||||
createMultiRedditListener.failed(1);
|
||||
}
|
||||
});
|
||||
@Override
|
||||
public void failed() {
|
||||
createMultiRedditListener.failed(1);
|
||||
}
|
||||
});
|
||||
} else {
|
||||
createMultiRedditListener.failed(response.code());
|
||||
}
|
||||
|
||||
@ -1,8 +1,11 @@
|
||||
package ml.docilealligator.infinityforreddit.multireddit;
|
||||
|
||||
import android.os.Handler;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.concurrent.Executor;
|
||||
|
||||
import ml.docilealligator.infinityforreddit.apis.RedditAPI;
|
||||
import ml.docilealligator.infinityforreddit.utils.APIUtils;
|
||||
@ -17,13 +20,13 @@ public class FetchMyMultiReddits {
|
||||
void failed();
|
||||
}
|
||||
|
||||
public static void fetchMyMultiReddits(Retrofit oauthRetrofit, String accessToken, FetchMyMultiRedditsListener fetchMyMultiRedditsListener) {
|
||||
public static void fetchMyMultiReddits(Executor executor, Handler handler, Retrofit oauthRetrofit, String accessToken, FetchMyMultiRedditsListener fetchMyMultiRedditsListener) {
|
||||
oauthRetrofit.create(RedditAPI.class)
|
||||
.getMyMultiReddits(APIUtils.getOAuthHeader(accessToken)).enqueue(new Callback<String>() {
|
||||
@Override
|
||||
public void onResponse(@NonNull Call<String> call, @NonNull Response<String> response) {
|
||||
if (response.isSuccessful()) {
|
||||
ParseMultiReddit.parseMultiRedditsList(response.body(), new ParseMultiReddit.ParseMultiRedditsListListener() {
|
||||
ParseMultiReddit.parseMultiRedditsList(executor, handler, response.body(), new ParseMultiReddit.ParseMultiRedditsListListener() {
|
||||
@Override
|
||||
public void success(ArrayList<MultiReddit> multiReddits) {
|
||||
fetchMyMultiRedditsListener.success(multiReddits);
|
||||
|
||||
@ -1,12 +1,13 @@
|
||||
package ml.docilealligator.infinityforreddit.multireddit;
|
||||
|
||||
import android.os.AsyncTask;
|
||||
import android.os.Handler;
|
||||
|
||||
import org.json.JSONArray;
|
||||
import org.json.JSONException;
|
||||
import org.json.JSONObject;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.concurrent.Executor;
|
||||
|
||||
import ml.docilealligator.infinityforreddit.RedditDataRoomDatabase;
|
||||
import ml.docilealligator.infinityforreddit.utils.JSONUtils;
|
||||
@ -22,13 +23,41 @@ public class ParseMultiReddit {
|
||||
void failed();
|
||||
}
|
||||
|
||||
public static void parseMultiRedditsList(String response, ParseMultiRedditsListListener parseMultiRedditsListListener) {
|
||||
new ParseMultiRedditsListAsyncTask(response, parseMultiRedditsListListener).execute();
|
||||
public static void parseMultiRedditsList(Executor executor, Handler handler, String response,
|
||||
ParseMultiRedditsListListener parseMultiRedditsListListener) {
|
||||
executor.execute(() -> {
|
||||
try {
|
||||
JSONArray arrayResponse = new JSONArray(response);
|
||||
ArrayList<MultiReddit> multiReddits = new ArrayList<>();
|
||||
for (int i = 0; i < arrayResponse.length(); i++) {
|
||||
try {
|
||||
multiReddits.add(parseMultiReddit(arrayResponse.getJSONObject(i).getJSONObject(JSONUtils.DATA_KEY)));
|
||||
} catch (JSONException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
handler.post(() -> parseMultiRedditsListListener.success(multiReddits));
|
||||
} catch (JSONException e) {
|
||||
e.printStackTrace();
|
||||
handler.post(parseMultiRedditsListListener::failed);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public static void parseAndSaveMultiReddit(String response, RedditDataRoomDatabase redditDataRoomDatabase,
|
||||
public static void parseAndSaveMultiReddit(Executor executor, Handler handler, String response, RedditDataRoomDatabase redditDataRoomDatabase,
|
||||
ParseMultiRedditListener parseMultiRedditListener) {
|
||||
new ParseAndSaveMultiRedditAsyncTask(response, redditDataRoomDatabase, parseMultiRedditListener).execute();
|
||||
executor.execute(() -> {
|
||||
try {
|
||||
MultiReddit multiReddit = parseMultiReddit(new JSONObject(response).getJSONObject(JSONUtils.DATA_KEY));
|
||||
redditDataRoomDatabase.multiRedditDao().insert(multiReddit);
|
||||
|
||||
handler.post(parseMultiRedditListener::success);
|
||||
} catch (JSONException e) {
|
||||
e.printStackTrace();
|
||||
handler.post(parseMultiRedditListener::failed);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private static MultiReddit parseMultiReddit(JSONObject singleMultiRedditJSON) throws JSONException {
|
||||
@ -56,83 +85,4 @@ public class ParseMultiReddit {
|
||||
iconUrl, visibility, owner, nSubscribers, createdUTC, over18, isSubscriber,
|
||||
isFavorited, subreddits);
|
||||
}
|
||||
|
||||
private static class ParseMultiRedditsListAsyncTask extends AsyncTask<Void, Void, Void> {
|
||||
private JSONArray arrayResponse;
|
||||
private boolean parseFailed;
|
||||
private ArrayList<MultiReddit> multiReddits;
|
||||
private final ParseMultiRedditsListListener parseMultiRedditsListListener;
|
||||
|
||||
ParseMultiRedditsListAsyncTask(String response,
|
||||
ParseMultiRedditsListListener parseMultiRedditsListListener) {
|
||||
this.parseMultiRedditsListListener = parseMultiRedditsListListener;
|
||||
try {
|
||||
arrayResponse = new JSONArray(response);
|
||||
multiReddits = new ArrayList<>();
|
||||
parseFailed = false;
|
||||
} catch (JSONException e) {
|
||||
e.printStackTrace();
|
||||
parseFailed = true;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Void doInBackground(Void... voids) {
|
||||
if (!parseFailed) {
|
||||
for (int i = 0; i < arrayResponse.length(); i++) {
|
||||
try {
|
||||
multiReddits.add(parseMultiReddit(arrayResponse.getJSONObject(i).getJSONObject(JSONUtils.DATA_KEY)));
|
||||
} catch (JSONException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onPostExecute(Void aVoid) {
|
||||
super.onPostExecute(aVoid);
|
||||
if (!parseFailed) {
|
||||
parseMultiRedditsListListener.success(multiReddits);
|
||||
} else {
|
||||
parseMultiRedditsListListener.failed();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static class ParseAndSaveMultiRedditAsyncTask extends AsyncTask<Void, Void, Void> {
|
||||
private final String response;
|
||||
private final RedditDataRoomDatabase redditDataRoomDatabase;
|
||||
private MultiReddit multiReddit;
|
||||
private final ParseMultiRedditListener parseMultiRedditListener;
|
||||
|
||||
ParseAndSaveMultiRedditAsyncTask(String response, RedditDataRoomDatabase redditDataRoomDatabase,
|
||||
ParseMultiRedditListener parseMultiRedditListener) {
|
||||
this.redditDataRoomDatabase = redditDataRoomDatabase;
|
||||
this.parseMultiRedditListener = parseMultiRedditListener;
|
||||
this.response = response;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Void doInBackground(Void... voids) {
|
||||
try {
|
||||
multiReddit = parseMultiReddit(new JSONObject(response).getJSONObject(JSONUtils.DATA_KEY));
|
||||
redditDataRoomDatabase.multiRedditDao().insert(multiReddit);
|
||||
} catch (JSONException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onPostExecute(Void aVoid) {
|
||||
super.onPostExecute(aVoid);
|
||||
if (multiReddit != null) {
|
||||
parseMultiRedditListener.success();
|
||||
} else {
|
||||
parseMultiRedditListener.failed();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user