Change some methods related to parsing data to static methods. Preparing to use Retrofit to send API requests. Already made a change to use Retrofit to fetch comments.

This commit is contained in:
Alex Ning 2018-08-27 23:05:56 +08:00
parent 41b243be7d
commit a6a951732d
16 changed files with 164 additions and 158 deletions

View File

@ -57,4 +57,5 @@ dependencies {
implementation 'io.reactivex.rxjava2:rxjava:2.2.0'
implementation 'org.sufficientlysecure:html-textview:3.6'
implementation 'com.squareup.retrofit2:retrofit:2.4.0'
implementation 'com.squareup.retrofit2:converter-scalars:2.4.0'
}

View File

@ -1,12 +1,13 @@
package ml.docilealligator.infinityforreddit;
import android.net.Uri;
import android.support.annotation.NonNull;
import android.util.Log;
import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.StringRequest;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
import retrofit2.Retrofit;
import retrofit2.converter.scalars.ScalarsConverterFactory;
class FetchComment {
interface FetchCommentListener {
@ -14,36 +15,34 @@ class FetchComment {
void onFetchCommentFail();
}
private RequestQueue requestQueue;
private String subredditName;
private String subredditNamePrefixed;
private String article;
private FetchCommentListener mFetchCommentListener;
FetchComment(RequestQueue requestQueue, String subredditName, String article) {
this.requestQueue = requestQueue;
this.subredditName = subredditName;
FetchComment(String subredditNamePrefixed, String article) {
this.subredditNamePrefixed = subredditNamePrefixed;
this.article = article;
}
void queryComment(FetchCommentListener fetchCommentListener) {
mFetchCommentListener = fetchCommentListener;
Uri uri = Uri.parse(RedditUtils.getQueryCommentUrl(subredditName, article))
.buildUpon().appendQueryParameter(RedditUtils.RAW_JSON_KEY, RedditUtils.RAW_JSON_VALUE)
void queryComment(final FetchCommentListener fetchCommentListener) {
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(RedditUtils.API_BASE_URI)
.addConverterFactory(ScalarsConverterFactory.create())
.build();
StringRequest commentRequest = new StringRequest(Request.Method.GET, uri.toString(), new Response.Listener<String>() {
RedditAPI api = retrofit.create(RedditAPI.class);
Call<String> comments = api.getComments(subredditNamePrefixed, article);
comments.enqueue(new Callback<String>() {
@Override
public void onResponse(String response) {
mFetchCommentListener.onFetchCommentSuccess(response);
public void onResponse(@NonNull Call<String> call, @NonNull Response<String> response) {
fetchCommentListener.onFetchCommentSuccess(response.body());
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
mFetchCommentListener.onFetchCommentFail();
public void onFailure(@NonNull Call<String> call, @NonNull Throwable t) {
Log.i("call failed", t.getMessage());
fetchCommentListener.onFetchCommentFail();
}
}) {};
commentRequest.setTag(FetchComment.class);
requestQueue.add(commentRequest);
});
}
}

View File

@ -55,7 +55,7 @@ class FetchSubscribedThing {
StringRequest commentRequest = new StringRequest(Request.Method.GET, uri.toString(), new Response.Listener<String>() {
@Override
public void onResponse(String response) {
new ParseSubscribedThing().parseSubscribedSubreddits(response, mSubscribedSubredditData,
ParseSubscribedThing.parseSubscribedSubreddits(response, mSubscribedSubredditData,
mSubscribedUserData, mSubredditData,
new ParseSubscribedThing.ParseSubscribedSubredditsListener() {

View File

@ -62,8 +62,8 @@ class JSONUtils {
static final String SUBREDDIT_TYPE_KEY = "subreddit_type";
static final String SUBREDDIT_TYPE_VALUE_USER = "user";
static final String SUBSCRIBERS_KEY = "subscribers";
static final String PUBLIC_DESCRIPTION = "public_description";
static final String ACTIVE_USER_COUNT = "active_user_count";
static final String DISPLAY_NAME_PREFIXED = "display_name_prefixed";
static final String LINK_ID = "link_id";
static final String PUBLIC_DESCRIPTION_KEY = "public_description";
static final String ACTIVE_USER_COUNT_KEY = "active_user_count";
static final String DISPLAY_NAME_PREFIXED_KEY = "display_name_prefixed";
static final String LINK_ID_KEY = "link_id";
}

View File

@ -17,7 +17,6 @@ import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.Toolbar;
import android.util.Log;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
@ -185,7 +184,7 @@ public class MainActivity extends AppCompatActivity {
new FetchUserInfo(this, Volley.newRequestQueue(this)).queryUserInfo(new FetchUserInfo.FetchUserInfoListener() {
@Override
public void onFetchUserInfoSuccess(String response) {
new ParseUserInfo().parseUserInfo(response, new ParseUserInfo.ParseUserInfoListener() {
ParseUserInfo.parseUserInfo(response, new ParseUserInfo.ParseUserInfoListener() {
@Override
public void onParseUserInfoSuccess(String name, String profileImageUrl, String bannerImageUrl, int karma) {
mNameTextView.setText(name);

View File

@ -1,6 +1,5 @@
package ml.docilealligator.infinityforreddit;
import android.content.Context;
import android.os.AsyncTask;
import android.util.Log;
@ -11,6 +10,7 @@ import org.json.JSONObject;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Locale;
class ParseComment {
interface ParseCommentListener {
@ -18,31 +18,30 @@ class ParseComment {
void onParseCommentFail();
}
private Context mContext;
private ParseCommentListener mParseCommentListener;
void parseComment(Context context, String response, ArrayList<CommentData> commentData, ParseCommentListener parseCommentListener) {
mParseCommentListener = parseCommentListener;
mContext = context;
new ParseCommentAsyncTask(response, commentData).execute();
static void parseComment(String response, ArrayList<CommentData> commentData, Locale locale, ParseCommentListener parseCommentListener) {
new ParseCommentAsyncTask(response, commentData, locale, parseCommentListener).execute();
}
private class ParseCommentAsyncTask extends AsyncTask<Void, Void, Void> {
private static class ParseCommentAsyncTask extends AsyncTask<Void, Void, Void> {
private JSONArray jsonResponse;
private ArrayList<CommentData> commentData;
private ArrayList<CommentData> newcommentData;
private Locale locale;
private ParseCommentListener parseCommentListener;
private boolean parseFailed;
int moreCommentCount;
private int moreCommentCount;
ParseCommentAsyncTask(String response, ArrayList<CommentData> commentData){
ParseCommentAsyncTask(String response, ArrayList<CommentData> commentData, Locale locale, ParseCommentListener parseCommentListener){
try {
jsonResponse = new JSONArray(response);
this.commentData = commentData;
newcommentData = new ArrayList<>();
this.locale = locale;
this.parseCommentListener = parseCommentListener;
parseFailed = false;
} catch (JSONException e) {
Log.i("comment json error", e.getMessage());
mParseCommentListener.onParseCommentFail();
parseCommentListener.onParseCommentFail();
}
}
@ -69,7 +68,7 @@ class ParseComment {
for (int i = 0; i < actualCommentLength; i++) {
JSONObject data = allComments.getJSONObject(i).getJSONObject(JSONUtils.DATA_KEY);
String fullName = data.getString(JSONUtils.LINK_ID);
String fullName = data.getString(JSONUtils.LINK_ID_KEY);
String author = data.getString(JSONUtils.AUTHOR_KEY);
boolean isSubmitter = data.getBoolean(JSONUtils.IS_SUBMITTER_KEY);
String commentContent = "";
@ -84,7 +83,7 @@ class ParseComment {
Calendar submitTimeCalendar = Calendar.getInstance();
submitTimeCalendar.setTimeInMillis(submitTime);
String formattedSubmitTime = new SimpleDateFormat("MMM d, YYYY, HH:mm",
mContext.getResources().getConfiguration().locale).format(submitTimeCalendar.getTime());
locale).format(submitTimeCalendar.getTime());
int depth = data.getInt(JSONUtils.DEPTH_KEY);
boolean collapsed = data.getBoolean(JSONUtils.COLLAPSED_KEY);
@ -103,9 +102,9 @@ class ParseComment {
protected void onPostExecute(Void aVoid) {
if(!parseFailed) {
commentData.addAll(newcommentData);
mParseCommentListener.onParseCommentSuccess(commentData, moreCommentCount);
parseCommentListener.onParseCommentSuccess(commentData, moreCommentCount);
} else {
mParseCommentListener.onParseCommentFail();
parseCommentListener.onParseCommentFail();
}
}
}

View File

@ -1,9 +1,7 @@
package ml.docilealligator.infinityforreddit;
import android.content.Context;
import android.os.AsyncTask;
import android.util.Log;
import android.widget.Toast;
import org.json.JSONArray;
import org.json.JSONException;
@ -12,6 +10,7 @@ import org.json.JSONObject;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Locale;
/**
* Created by alex on 3/21/18.
@ -24,34 +23,31 @@ class ParsePost {
void onParsePostFail();
}
private Context mContext;
private ParsePostListener mParseBetPostListener;
ParsePost(Context context, ParsePostListener parsePostListener) {
mContext = context;
mParseBetPostListener = parsePostListener;
static void parsePost(String response, ArrayList<PostData> postData, Locale locale,
ParsePostListener parsePostListener) {
new ParsePostDataAsyncTask(response, postData, locale, parsePostListener).execute();
}
void parsePost(String response, ArrayList<PostData> postData) {
new ParsePostDataAsyncTask(response, postData).execute();
}
private class ParsePostDataAsyncTask extends AsyncTask<Void, Void, Void> {
private static class ParsePostDataAsyncTask extends AsyncTask<Void, Void, Void> {
private JSONObject jsonResponse;
private ArrayList<PostData> postData;
private Locale locale;
private ParsePostListener parsePostListener;
private ArrayList<PostData> newPostData;
private String lastItem;
private boolean parseFailed;
ParsePostDataAsyncTask(String response, ArrayList<PostData> postData) {
ParsePostDataAsyncTask(String response, ArrayList<PostData> postData, Locale locale,
ParsePostListener parsePostListener) {
try {
jsonResponse = new JSONObject(response);
this.postData = postData;
this.locale = locale;
this.parsePostListener = parsePostListener;
newPostData = new ArrayList<>();
parseFailed = false;
} catch (JSONException e) {
e.printStackTrace();
Toast.makeText(mContext, "Error converting response to JSON", Toast.LENGTH_SHORT).show();
}
}
@ -82,7 +78,7 @@ class ParsePost {
Calendar postTimeCalendar = Calendar.getInstance();
postTimeCalendar.setTimeInMillis(postTime);
String formattedPostTime = new SimpleDateFormat("MMM d, YYYY, HH:mm",
mContext.getResources().getConfiguration().locale).format(postTimeCalendar.getTime());
locale).format(postTimeCalendar.getTime());
String permalink = data.getString(JSONUtils.PERMALINK_KEY);
String previewUrl = "";
@ -102,8 +98,7 @@ class ParsePost {
}
}
} catch (JSONException e) {
Log.e("error", e.getMessage());
Log.i("Best post", "Error parsing data");
Log.e("best post parse error", e.getMessage());
parseFailed = true;
}
return null;
@ -113,14 +108,14 @@ class ParsePost {
protected void onPostExecute(Void aVoid) {
if(!parseFailed) {
postData.addAll(newPostData);
mParseBetPostListener.onParsePostSuccess(postData, lastItem);
parsePostListener.onParsePostSuccess(postData, lastItem);
} else {
mParseBetPostListener.onParsePostFail();
parsePostListener.onParsePostFail();
}
}
}
private void parseData(JSONObject data, String permalink, ArrayList<PostData> bestPostData,
private static void parseData(JSONObject data, String permalink, ArrayList<PostData> bestPostData,
String id, String fullName, String subredditNamePrefixed, String formattedPostTime,
String title, String previewUrl, int score, int voteType, int gilded,
boolean nsfw, boolean stickied, int i) throws JSONException {

View File

@ -12,11 +12,8 @@ class ParseSubredditData {
void onParseSubredditDataFail();
}
private ParseSubredditDataListener mParseSubredditDataListener;
void parseComment(String response, ParseSubredditDataListener parseSubredditDataListener) {
mParseSubredditDataListener = parseSubredditDataListener;
new ParseSubredditDataAsyncTask(response, mParseSubredditDataListener).execute();
static void parseComment(String response, ParseSubredditDataListener parseSubredditDataListener) {
new ParseSubredditDataAsyncTask(response, parseSubredditDataListener).execute();
}
private static class ParseSubredditDataAsyncTask extends AsyncTask<Void, Void, Void> {
@ -42,8 +39,8 @@ class ParseSubredditData {
try {
JSONObject data = jsonResponse.getJSONObject(JSONUtils.DATA_KEY);
String id = data.getString(JSONUtils.NAME_KEY);
String subredditFullName = data.getString(JSONUtils.DISPLAY_NAME_PREFIXED);
String description = data.getString(JSONUtils.PUBLIC_DESCRIPTION).trim();
String subredditFullName = data.getString(JSONUtils.DISPLAY_NAME_PREFIXED_KEY);
String description = data.getString(JSONUtils.PUBLIC_DESCRIPTION_KEY).trim();
String bannerImageUrl = data.getString(JSONUtils.BANNER_BACKGROUND_IMAGE_KEY);
if(bannerImageUrl.equals("") || bannerImageUrl.equals("null")) {
bannerImageUrl= data.getString(JSONUtils.BANNER_IMG_KEY);
@ -59,7 +56,7 @@ class ParseSubredditData {
}
}
int nSubscribers = data.getInt(JSONUtils.SUBSCRIBERS_KEY);
int nCurrentOnlineSubscribers = data.getInt(JSONUtils.ACTIVE_USER_COUNT);
int nCurrentOnlineSubscribers = data.getInt(JSONUtils.ACTIVE_USER_COUNT_KEY);
subredditData = new SubredditData(id, subredditFullName, iconUrl, bannerImageUrl, description, nSubscribers);
mNCurrentOnlineSubscribers = nCurrentOnlineSubscribers;
} catch (JSONException e) {

View File

@ -18,7 +18,7 @@ class ParseSubscribedThing {
void onParseSubscribedSubredditsFail();
}
void parseSubscribedSubreddits(String response, ArrayList<SubscribedSubredditData> subscribedSubredditData,
static void parseSubscribedSubreddits(String response, ArrayList<SubscribedSubredditData> subscribedSubredditData,
ArrayList<SubscribedUserData> subscribedUserData,
ArrayList<SubredditData> subredditData,
ParseSubscribedSubredditsListener parseSubscribedSubredditsListener) {
@ -92,8 +92,8 @@ class ParseSubscribedThing {
//It's a user
newSubscribedUserData.add(new SubscribedUserData(id, name.substring(2), iconUrl));
} else {
String subredditFullName = data.getString(JSONUtils.DISPLAY_NAME_PREFIXED);
String description = data.getString(JSONUtils.PUBLIC_DESCRIPTION).trim();
String subredditFullName = data.getString(JSONUtils.DISPLAY_NAME_PREFIXED_KEY);
String description = data.getString(JSONUtils.PUBLIC_DESCRIPTION_KEY).trim();
int nSubscribers = data.getInt(JSONUtils.SUBSCRIBERS_KEY);
newSubscribedSubredditData.add(new SubscribedSubredditData(id, name, iconUrl));
newSubredditData.add(new SubredditData(id, subredditFullName, iconUrl, bannerImageUrl, description, nSubscribers));

View File

@ -13,15 +13,13 @@ class ParseUserInfo {
void onParseUserInfoFail();
}
private ParseUserInfoListener mParseUserInfoListener;
void parseUserInfo(String response, ParseUserInfoListener parseUserInfoListener) {
mParseUserInfoListener = parseUserInfoListener;
new ParseUserInfoAsyncTask(response).execute();
static void parseUserInfo(String response, ParseUserInfoListener parseUserInfoListener) {
new ParseUserInfoAsyncTask(response, parseUserInfoListener).execute();
}
private class ParseUserInfoAsyncTask extends AsyncTask<Void, Void, Void> {
private static class ParseUserInfoAsyncTask extends AsyncTask<Void, Void, Void> {
private JSONObject jsonResponse;
private ParseUserInfoListener parseUserInfoListener;
private boolean parseFailed;
private String name;
@ -29,13 +27,14 @@ class ParseUserInfo {
private String bannerImageUrl;
private int karma;
ParseUserInfoAsyncTask(String response){
ParseUserInfoAsyncTask(String response, ParseUserInfoListener parseUserInfoListener){
try {
jsonResponse = new JSONObject(response);
this.parseUserInfoListener = parseUserInfoListener;
parseFailed = false;
} catch (JSONException e) {
Log.i("user info json error", e.getMessage());
mParseUserInfoListener.onParseUserInfoFail();
parseUserInfoListener.onParseUserInfoFail();
}
}
@ -58,9 +57,9 @@ class ParseUserInfo {
@Override
protected void onPostExecute(Void aVoid) {
if(!parseFailed) {
mParseUserInfoListener.onParseUserInfoSuccess(name, profileImageUrl, bannerImageUrl, karma);
parseUserInfoListener.onParseUserInfoSuccess(name, profileImageUrl, bannerImageUrl, karma);
} else {
mParseUserInfoListener.onParseUserInfoFail();
parseUserInfoListener.onParseUserInfoFail();
}
}
}

View File

@ -77,7 +77,8 @@ public class PostFragment extends Fragment {
getActivity(), mLinearLayoutManager, mAdapter, mLastItem, mPostData,
mPaginationSynchronizer, mAcquireAccessTokenRequestQueue,
mQueryPostUrl, mIsBestPost,
mPaginationSynchronizer.isLoading(), mPaginationSynchronizer.isLoadSuccess()));
mPaginationSynchronizer.isLoading(), mPaginationSynchronizer.isLoadSuccess(),
getResources().getConfiguration().locale));
mProgressBar.setVisibility(View.GONE);
} else {
if(mIsBestPost) {
@ -196,29 +197,31 @@ public class PostFragment extends Fragment {
ClipData clip = ClipData.newPlainText("response", response);
clipboard.setPrimaryClip(clip);
//new ParsePostDataAsyncTask(response, accessToken).execute();
new ParsePost(getActivity(), new ParsePost.ParsePostListener() {
@Override
public void onParsePostSuccess(ArrayList<PostData> postData, String lastItem) {
mPostData = postData;
mLastItem = lastItem;
mAdapter = new PostRecyclerViewAdapter(getActivity(), postData, mPaginationSynchronizer, mVoteThingRequestQueue, mAcquireAccessTokenRequestQueue);
ParsePost.parsePost(response, new ArrayList<PostData>(),
getResources().getConfiguration().locale, new ParsePost.ParsePostListener() {
@Override
public void onParsePostSuccess(ArrayList<PostData> postData, String lastItem) {
mPostData = postData;
mLastItem = lastItem;
mAdapter = new PostRecyclerViewAdapter(getActivity(), postData, mPaginationSynchronizer, mVoteThingRequestQueue, mAcquireAccessTokenRequestQueue);
mPostRecyclerView.setAdapter(mAdapter);
mPostRecyclerView.addOnScrollListener(new PostPaginationScrollListener(
getActivity(), mLinearLayoutManager, mAdapter, lastItem, postData,
mPaginationSynchronizer, mAcquireAccessTokenRequestQueue,
mQueryPostUrl, mIsBestPost,
mPaginationSynchronizer.isLoading(), mPaginationSynchronizer.isLoadSuccess()));
mProgressBar.setVisibility(View.GONE);
}
mPostRecyclerView.setAdapter(mAdapter);
mPostRecyclerView.addOnScrollListener(new PostPaginationScrollListener(
getActivity(), mLinearLayoutManager, mAdapter, lastItem, postData,
mPaginationSynchronizer, mAcquireAccessTokenRequestQueue,
mQueryPostUrl, mIsBestPost,
mPaginationSynchronizer.isLoading(), mPaginationSynchronizer.isLoadSuccess(),
getResources().getConfiguration().locale));
mProgressBar.setVisibility(View.GONE);
}
@Override
public void onParsePostFail() {
Toast.makeText(getActivity(), "Error parsing data", Toast.LENGTH_SHORT).show();
Log.i("Post fetch error", "Error parsing data");
mProgressBar.setVisibility(View.GONE);
}
}).parsePost(response, new ArrayList<PostData>());
@Override
public void onParsePostFail() {
Toast.makeText(getActivity(), "Error parsing data", Toast.LENGTH_SHORT).show();
Log.i("Post fetch error", "Error parsing data");
mProgressBar.setVisibility(View.GONE);
}
});
}
}
}, new Response.ErrorListener() {
@ -273,29 +276,31 @@ public class PostFragment extends Fragment {
ClipData clip = ClipData.newPlainText("response", response);
clipboard.setPrimaryClip(clip);
//new ParsePostDataAsyncTask(response, accessToken).execute();
new ParsePost(getActivity(), new ParsePost.ParsePostListener() {
@Override
public void onParsePostSuccess(ArrayList<PostData> postData, String lastItem) {
mPostData = postData;
mLastItem = lastItem;
mAdapter = new PostRecyclerViewAdapter(getActivity(), postData, mPaginationSynchronizer, mVoteThingRequestQueue, mAcquireAccessTokenRequestQueue);
ParsePost.parsePost(response, new ArrayList<PostData>(),
getResources().getConfiguration().locale, new ParsePost.ParsePostListener() {
@Override
public void onParsePostSuccess(ArrayList<PostData> postData, String lastItem) {
mPostData = postData;
mLastItem = lastItem;
mAdapter = new PostRecyclerViewAdapter(getActivity(), postData, mPaginationSynchronizer, mVoteThingRequestQueue, mAcquireAccessTokenRequestQueue);
mPostRecyclerView.setAdapter(mAdapter);
mPostRecyclerView.addOnScrollListener(new PostPaginationScrollListener(
getActivity(), mLinearLayoutManager, mAdapter, lastItem, postData,
mPaginationSynchronizer, mAcquireAccessTokenRequestQueue,
mQueryPostUrl, mIsBestPost,
mPaginationSynchronizer.isLoading(), mPaginationSynchronizer.isLoadSuccess()));
mProgressBar.setVisibility(View.GONE);
}
mPostRecyclerView.setAdapter(mAdapter);
mPostRecyclerView.addOnScrollListener(new PostPaginationScrollListener(
getActivity(), mLinearLayoutManager, mAdapter, lastItem, postData,
mPaginationSynchronizer, mAcquireAccessTokenRequestQueue,
mQueryPostUrl, mIsBestPost,
mPaginationSynchronizer.isLoading(), mPaginationSynchronizer.isLoadSuccess(),
getResources().getConfiguration().locale));
mProgressBar.setVisibility(View.GONE);
}
@Override
public void onParsePostFail() {
Toast.makeText(getActivity(), "Error parsing data", Toast.LENGTH_SHORT).show();
Log.i("Post fetch error", "Error parsing data");
mProgressBar.setVisibility(View.GONE);
}
}).parsePost(response, new ArrayList<PostData>());
@Override
public void onParsePostFail() {
Toast.makeText(getActivity(), "Error parsing data", Toast.LENGTH_SHORT).show();
Log.i("Post fetch error", "Error parsing data");
mProgressBar.setVisibility(View.GONE);
}
});
}
}
}, new Response.ErrorListener() {

View File

@ -19,6 +19,7 @@ import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;
import java.util.ArrayList;
import java.util.Locale;
import java.util.Map;
/**
@ -39,6 +40,7 @@ class PostPaginationScrollListener extends RecyclerView.OnScrollListener {
private boolean isBestPost;
private boolean isLoading;
private boolean loadSuccess;
private Locale locale;
private String mLastItem;
private RequestQueue mRequestQueue;
private RequestQueue mAcquireAccessTokenRequestQueue;
@ -46,7 +48,7 @@ class PostPaginationScrollListener extends RecyclerView.OnScrollListener {
PostPaginationScrollListener(Context context, LinearLayoutManager layoutManager, PostRecyclerViewAdapter adapter,
String lastItem, ArrayList<PostData> postData, PaginationSynchronizer paginationSynchronizer,
RequestQueue acquireAccessTokenRequestQueue, final String queryPostUrl,
final boolean isBestPost, boolean isLoading, boolean loadSuccess) {
final boolean isBestPost, boolean isLoading, boolean loadSuccess, Locale locale) {
if(context != null) {
this.mContext = context;
this.mLayoutManager = layoutManager;
@ -59,6 +61,7 @@ class PostPaginationScrollListener extends RecyclerView.OnScrollListener {
this.isBestPost = isBestPost;
this.isLoading = isLoading;
this.loadSuccess = loadSuccess;
this.locale = locale;
mRequestQueue = Volley.newRequestQueue(mContext);
mAcquireAccessTokenRequestQueue = Volley.newRequestQueue(mContext);
@ -117,7 +120,7 @@ class PostPaginationScrollListener extends RecyclerView.OnScrollListener {
ClipboardManager clipboard = (ClipboardManager) mContext.getSystemService(Context.CLIPBOARD_SERVICE);
ClipData clip = ClipData.newPlainText("response", response);
clipboard.setPrimaryClip(clip);
new ParsePost(mContext, new ParsePost.ParsePostListener() {
ParsePost.parsePost(response, mPostData, locale, new ParsePost.ParsePostListener() {
@Override
public void onParsePostSuccess(ArrayList<PostData> bestPostData, String lastItem) {
mAdapter.notifyDataSetChanged();
@ -136,7 +139,7 @@ class PostPaginationScrollListener extends RecyclerView.OnScrollListener {
Log.i("Best post", "Error parsing data");
loadFailed();
}
}).parsePost(response, mPostData);
});
}
}, new Response.ErrorListener() {
@Override
@ -190,7 +193,7 @@ class PostPaginationScrollListener extends RecyclerView.OnScrollListener {
ClipboardManager clipboard = (ClipboardManager) mContext.getSystemService(Context.CLIPBOARD_SERVICE);
ClipData clip = ClipData.newPlainText("response", response);
clipboard.setPrimaryClip(clip);
new ParsePost(mContext, new ParsePost.ParsePostListener() {
ParsePost.parsePost(response, mPostData, locale, new ParsePost.ParsePostListener() {
@Override
public void onParsePostSuccess(ArrayList<PostData> bestPostData, String lastItem) {
mAdapter.notifyDataSetChanged();
@ -209,7 +212,7 @@ class PostPaginationScrollListener extends RecyclerView.OnScrollListener {
Log.i("Best post", "Error parsing data");
loadFailed();
}
}).parsePost(response, mPostData);
});
}
}, new Response.ErrorListener() {
@Override

View File

@ -0,0 +1,10 @@
package ml.docilealligator.infinityforreddit;
import retrofit2.Call;
import retrofit2.http.GET;
import retrofit2.http.Path;
public interface RedditAPI {
@GET("{subredditNamePrefixed}/comments/{article}.json?raw_json=1")
Call<String> getComments(@Path("subredditNamePrefixed") String subredditNamePrefixed, @Path("article") String article);
}

View File

@ -61,7 +61,6 @@ public class ViewPostDetailActivity extends AppCompatActivity {
private RequestQueue mVoteThingRequestQueue;
private RequestQueue mAcquireAccessTokenRequestQueue;
private RequestQueue mCommentQueue;
@Override
protected void onCreate(Bundle savedInstanceState) {
@ -143,7 +142,6 @@ public class ViewPostDetailActivity extends AppCompatActivity {
mRecyclerView.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.VERTICAL));
mVoteThingRequestQueue = Volley.newRequestQueue(this);
mAcquireAccessTokenRequestQueue = Volley.newRequestQueue(this);
mCommentQueue = Volley.newRequestQueue(this);
subredditTextView.setText(mPostData.getSubredditNamePrefixed());
postTimeTextView.setText(mPostData.getPostTime());
@ -494,24 +492,25 @@ public class ViewPostDetailActivity extends AppCompatActivity {
private void queryComment() {
mCommentProgressbar.setVisibility(View.VISIBLE);
mNoCommentWrapperLinearLayout.setVisibility(View.GONE);
new FetchComment(mCommentQueue, mPostData.getSubredditNamePrefixed(), mPostData.getId()).queryComment(new FetchComment.FetchCommentListener() {
new FetchComment(mPostData.getSubredditNamePrefixed(), mPostData.getId()).queryComment(new FetchComment.FetchCommentListener() {
@Override
public void onFetchCommentSuccess(String response) {
new ParseComment().parseComment(ViewPostDetailActivity.this, response, new ArrayList<CommentData>(), new ParseComment.ParseCommentListener() {
@Override
public void onParseCommentSuccess(ArrayList<CommentData> commentData, int moreCommentCount) {
mCommentProgressbar.setVisibility(View.GONE);
mMoreCommentCount = moreCommentCount;
if(commentData.size() > 0) {
CommentRecyclerViewAdapter adapter = new CommentRecyclerViewAdapter(
ViewPostDetailActivity.this, commentData, mVoteThingRequestQueue, mAcquireAccessTokenRequestQueue);
mRecyclerView.setAdapter(adapter);
mCommentCardView.setVisibility(View.VISIBLE);
} else {
mNoCommentWrapperLinearLayout.setVisibility(View.VISIBLE);
Glide.with(ViewPostDetailActivity.this).load(R.drawable.no_comment_indicator).into(mNoCommentImageView);
}
}
ParseComment.parseComment(response, new ArrayList<CommentData>(),
getResources().getConfiguration().locale, new ParseComment.ParseCommentListener() {
@Override
public void onParseCommentSuccess(ArrayList<CommentData> commentData, int moreCommentCount) {
mCommentProgressbar.setVisibility(View.GONE);
mMoreCommentCount = moreCommentCount;
if (commentData.size() > 0) {
CommentRecyclerViewAdapter adapter = new CommentRecyclerViewAdapter(
ViewPostDetailActivity.this, commentData, mVoteThingRequestQueue, mAcquireAccessTokenRequestQueue);
mRecyclerView.setAdapter(adapter);
mCommentCardView.setVisibility(View.VISIBLE);
} else {
mNoCommentWrapperLinearLayout.setVisibility(View.VISIBLE);
Glide.with(ViewPostDetailActivity.this).load(R.drawable.no_comment_indicator).into(mNoCommentImageView);
}
}
@Override
public void onParseCommentFail() {

View File

@ -140,7 +140,7 @@ public class ViewSubredditDetailActivity extends AppCompatActivity {
new FetchSubredditData(Volley.newRequestQueue(this), subredditName).querySubredditData(new FetchSubredditData.FetchSubredditDataListener() {
@Override
public void onFetchSubredditDataSuccess(String response) {
new ParseSubredditData().parseComment(response, new ParseSubredditData.ParseSubredditDataListener() {
ParseSubredditData.parseComment(response, new ParseSubredditData.ParseSubredditDataListener() {
@Override
public void onParseSubredditDataSuccess(SubredditData subredditData, int nCurrentOnlineSubscribers) {
new InsertSubredditDataAsyncTask(SubredditRoomDatabase.getDatabase(ViewSubredditDetailActivity.this), subredditData)