diff --git a/Habitica/res/values/strings.xml b/Habitica/res/values/strings.xml
index 22507cf45..144dea958 100644
--- a/Habitica/res/values/strings.xml
+++ b/Habitica/res/values/strings.xml
@@ -18,7 +18,7 @@
Change Habitica\'s language
Your QR Code
Contact me
- An error happened…
+ An error occurred…
Account
First Day of the Week
First day of the week in all calendars
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ErrorResponse.java b/Habitica/src/main/java/com/habitrpg/android/habitica/ErrorResponse.java
index 124912df5..e0f8b0554 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/ErrorResponse.java
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ErrorResponse.java
@@ -1,5 +1,23 @@
package com.habitrpg.android.habitica;
+import com.magicmicky.habitrpgwrapper.lib.models.HabiticaError;
+
+import java.util.List;
+
public class ErrorResponse {
public String message;
+ public List errors;
+
+ public String getDisplayMessage() {
+ if (errors != null && errors.size() > 0) {
+ HabiticaError error = errors.get(0);
+ if (error.message != null && error.message.length() > 0) {
+ return error.message;
+ }
+ }
+ if (message != null && message.length() > 0) {
+ return message;
+ }
+ return "";
+ }
}
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/data/ApiClient.java b/Habitica/src/main/java/com/habitrpg/android/habitica/data/ApiClient.java
index 5c10462ec..9d5a3cb93 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/data/ApiClient.java
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/data/ApiClient.java
@@ -34,7 +34,7 @@ import java.util.ArrayList;
import java.util.List;
import java.util.Map;
-import retrofit2.adapter.rxjava.HttpException;
+import retrofit2.HttpException;
import rx.Observable;
public interface ApiClient {
diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/ApiClientImpl.java b/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/ApiClientImpl.java
index 34789c5ea..6f72238a3 100644
--- a/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/ApiClientImpl.java
+++ b/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/ApiClientImpl.java
@@ -15,10 +15,10 @@ import com.habitrpg.android.habitica.HabiticaApplication;
import com.habitrpg.android.habitica.HabiticaBaseApplication;
import com.habitrpg.android.habitica.HostConfig;
import com.habitrpg.android.habitica.R;
+import com.habitrpg.android.habitica.data.ApiClient;
import com.habitrpg.android.habitica.database.CheckListItemExcludeStrategy;
import com.habitrpg.android.habitica.helpers.PopupNotificationsManager;
import com.habitrpg.android.habitica.proxy.ifce.CrashlyticsProxy;
-import com.habitrpg.android.habitica.data.ApiClient;
import com.magicmicky.habitrpgwrapper.lib.api.ApiService;
import com.magicmicky.habitrpgwrapper.lib.api.Server;
import com.magicmicky.habitrpgwrapper.lib.models.AchievementResult;
@@ -108,8 +108,9 @@ import okhttp3.Request;
import okhttp3.ResponseBody;
import okhttp3.logging.HttpLoggingInterceptor;
import retrofit2.Converter;
+import retrofit2.HttpException;
+import retrofit2.Response;
import retrofit2.Retrofit;
-import retrofit2.adapter.rxjava.HttpException;
import retrofit2.adapter.rxjava.RxJavaCallAdapterFactory;
import retrofit2.converter.gson.GsonConverterFactory;
import rx.Observable;
@@ -306,7 +307,7 @@ public class ApiClientImpl implements Action1, ApiClient {
this.showConnectionProblemDialog(R.string.internal_error_api);
} else if (throwableClass.equals(SocketTimeoutException.class) || UnknownHostException.class.equals(throwableClass)) {
this.showConnectionProblemDialog(R.string.network_error_no_network_body);
- } else if (throwableClass.equals(HttpException.class)) {
+ } else if (throwableClass.equals(retrofit2.adapter.rxjava.HttpException.class)) {
HttpException error = (HttpException) throwable;
ErrorResponse res = getErrorResponse(error);
int status = error.code();
@@ -317,12 +318,11 @@ public class ApiClientImpl implements Action1, ApiClient {
}
if (status >= 400 && status < 500) {
- if (res != null && res.message != null && !res.message.isEmpty()) {
- showConnectionProblemDialog("", res.message);
+ if (res != null && res.getDisplayMessage().length() > 0) {
+ showConnectionProblemDialog("", res.getDisplayMessage());
} else if (status == 401) {
showConnectionProblemDialog(R.string.authentication_error_title, R.string.authentication_error_body);
}
-
} else if (status >= 500 && status < 600) {
this.showConnectionProblemDialog(R.string.internal_error_api);
} else {
@@ -334,7 +334,7 @@ public class ApiClientImpl implements Action1, ApiClient {
}
public ErrorResponse getErrorResponse(HttpException error) {
- retrofit2.Response> response = error.response();
+ Response> response = error.response();
Converter errorConverter =
gsonConverter
.responseBodyConverter(ErrorResponse.class, new Annotation[0], retrofitAdapter);
@@ -417,9 +417,7 @@ public class ApiClientImpl implements Action1, ApiClient {
AlertDialog.Builder builder = new AlertDialog.Builder(HabiticaApplication.currentActivity)
.setTitle(resourceTitleString)
.setMessage(resourceMessageString)
- .setNeutralButton(android.R.string.ok, (dialog, which) -> {
- displayedAlert = null;
- });
+ .setNeutralButton(android.R.string.ok, (dialog, which) -> displayedAlert = null);
if (!resourceTitleString.isEmpty()) {
builder.setIcon(R.drawable.ic_warning_black);
diff --git a/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/HabiticaError.java b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/HabiticaError.java
new file mode 100644
index 000000000..7632be9e5
--- /dev/null
+++ b/Habitica/src/main/java/com/magicmicky/habitrpgwrapper/lib/models/HabiticaError.java
@@ -0,0 +1,7 @@
+package com.magicmicky.habitrpgwrapper.lib.models;
+
+public class HabiticaError {
+ public String message;
+ public String param;
+ public String value;
+}