From c937d307132c8e362b122c8a89f5feb28f3b71ef Mon Sep 17 00:00:00 2001 From: Vavassor Date: Sun, 5 Feb 2017 23:13:48 -0500 Subject: [PATCH] Fix: All statuses failed to load when status JSON was checked for boolean values, but received null and would throw a JSONException. A change in the Mastodon server implementation seemed to be the cause. In the future, either default booleans to false or check for null first before getting them. --- app/src/main/java/com/keylesspalace/tusky/MainActivity.java | 2 -- app/src/main/java/com/keylesspalace/tusky/Status.java | 4 ++-- .../main/java/com/keylesspalace/tusky/TimelineFragment.java | 5 +++-- 3 files changed, 5 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/com/keylesspalace/tusky/MainActivity.java b/app/src/main/java/com/keylesspalace/tusky/MainActivity.java index ab02c97bd..82b921dc8 100644 --- a/app/src/main/java/com/keylesspalace/tusky/MainActivity.java +++ b/app/src/main/java/com/keylesspalace/tusky/MainActivity.java @@ -86,8 +86,6 @@ public class MainActivity extends AppCompatActivity { notificationServiceEnabled = preferences.getBoolean("pullNotifications", true); String minutesString = preferences.getString("pullNotificationCheckInterval", "15"); long notificationCheckInterval = 60 * 1000 * Integer.valueOf(minutesString); - Log.d(TAG, String.format("pull notifications: %b %dm", notificationServiceEnabled, - Integer.valueOf(minutesString))); // Start up the PullNotificationsService. alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE); Intent intent = new Intent(this, PullNotificationService.class); diff --git a/app/src/main/java/com/keylesspalace/tusky/Status.java b/app/src/main/java/com/keylesspalace/tusky/Status.java index 8b89ba572..ecfe2704e 100644 --- a/app/src/main/java/com/keylesspalace/tusky/Status.java +++ b/app/src/main/java/com/keylesspalace/tusky/Status.java @@ -194,8 +194,8 @@ public class Status { String id = object.getString("id"); String content = object.getString("content"); Date createdAt = parseDate(object.getString("created_at")); - boolean reblogged = object.getBoolean("reblogged"); - boolean favourited = object.getBoolean("favourited"); + boolean reblogged = object.optBoolean("reblogged"); + boolean favourited = object.optBoolean("favourited"); String spoilerText = object.getString("spoiler_text"); boolean sensitive = object.optBoolean("sensitive"); String visibility = object.getString("visibility"); diff --git a/app/src/main/java/com/keylesspalace/tusky/TimelineFragment.java b/app/src/main/java/com/keylesspalace/tusky/TimelineFragment.java index c799efc65..208a05f98 100644 --- a/app/src/main/java/com/keylesspalace/tusky/TimelineFragment.java +++ b/app/src/main/java/com/keylesspalace/tusky/TimelineFragment.java @@ -24,6 +24,7 @@ import android.support.v4.widget.SwipeRefreshLayout; import android.support.v7.widget.DividerItemDecoration; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; +import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -42,6 +43,7 @@ import java.util.Map; public class TimelineFragment extends SFragment implements SwipeRefreshLayout.OnRefreshListener, StatusActionListener, FooterActionListener { + private static final String TAG = "Timeline"; // logging tag public enum Kind { HOME, @@ -176,12 +178,10 @@ public class TimelineFragment extends SFragment implements break; } case TAG: { - assert(hashtagOrId != null); endpoint = String.format(getString(R.string.endpoint_timelines_tag), hashtagOrId); break; } case USER: { - assert(hashtagOrId != null); endpoint = String.format(getString(R.string.endpoint_statuses), hashtagOrId); break; } @@ -237,6 +237,7 @@ public class TimelineFragment extends SFragment implements public void onFetchTimelineFailure(Exception exception) { showFetchTimelineRetry(true); swipeRefreshLayout.setRefreshing(false); + Log.e(TAG, exception.getMessage()); } private void showFetchTimelineRetry(boolean show) {