diff --git a/app/src/main/java/com/luca0n/joguitos/pluck/activities/TriviaGameActivity.java b/app/src/main/java/com/luca0n/joguitos/pluck/activities/TriviaGameActivity.java index f3d3cef..cece721 100644 --- a/app/src/main/java/com/luca0n/joguitos/pluck/activities/TriviaGameActivity.java +++ b/app/src/main/java/com/luca0n/joguitos/pluck/activities/TriviaGameActivity.java @@ -48,6 +48,7 @@ import butterknife.BindView; import butterknife.ButterKnife; import com.luca0n.joguitos.pluck.R; import com.luca0n.joguitos.pluck.exceptions.NoTriviaResultsException; +import com.luca0n.joguitos.pluck.exceptions.InvalidServerResponseException; import com.luca0n.joguitos.pluck.fragments.TriviaGameErrorFragment; import com.luca0n.joguitos.pluck.fragments.TriviaQuestionFragment; import com.luca0n.joguitos.pluck.interfaces.IDownloadTriviaQuestionReceiver; @@ -142,8 +143,9 @@ public class TriviaGameActivity extends BaseActivity } else { try { this.game = new TriviaGame(ApiUtil.jsonToQuestionArray(json)); - } catch (NoTriviaResultsException e) { - onNoTriviaResults(); + } catch (Exception e) { + //onNoTriviaResults(); + onException(e); return; } } @@ -190,8 +192,21 @@ public class TriviaGameActivity extends BaseActivity ft.commit(); } - private void onNoTriviaResults() { - String msg = getResources().getString(R.string.error_no_trivia_results); + /** + * Handles caught exceptions and gives feedback to alert errors to the player. + * @param e The caught exception. + */ + private void onException(Exception e) { + // Hide the progress bar. + progressBar.setVisibility(View.GONE); + String msg; + if (e instanceof NoTriviaResultsException) + msg = getResources().getString(R.string.error_no_trivia_results); + else if (e instanceof InvalidServerResponseException) + msg = getResources().getString(R.string.error_server_response_invalid); + else + msg = getResources().getString(R.string.error_unknown); + Fragment errorFragment = TriviaGameErrorFragment.newInstance(msg); FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); diff --git a/app/src/main/java/com/luca0n/joguitos/pluck/util/ApiUtil.java b/app/src/main/java/com/luca0n/joguitos/pluck/util/ApiUtil.java index c4b4e83..5a77fb5 100644 --- a/app/src/main/java/com/luca0n/joguitos/pluck/util/ApiUtil.java +++ b/app/src/main/java/com/luca0n/joguitos/pluck/util/ApiUtil.java @@ -31,6 +31,7 @@ import com.google.gson.JsonArray; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.JsonParser; +import com.google.gson.JsonSyntaxException; import java.io.BufferedInputStream; import java.io.BufferedReader; @@ -46,6 +47,7 @@ import java.util.ArrayList; import com.luca0n.joguitos.pluck.R; import com.luca0n.joguitos.pluck.PluckApplication; import com.luca0n.joguitos.pluck.exceptions.NoTriviaResultsException; +import com.luca0n.joguitos.pluck.exceptions.InvalidServerResponseException; import com.luca0n.joguitos.pluck.trivia.TriviaQuery; import com.luca0n.joguitos.pluck.trivia.TriviaQuestion; import com.luca0n.joguitos.pluck.trivia.TriviaQuestionBoolean; @@ -102,8 +104,15 @@ public class ApiUtil { return GET(query.toString()); } - public static ArrayList jsonToQuestionArray(String json) throws NoTriviaResultsException { - JsonObject jsonObject = new JsonParser().parse(json).getAsJsonObject(); + public static ArrayList jsonToQuestionArray(String json) + throws NoTriviaResultsException, InvalidServerResponseException { + JsonObject jsonObject; + try{ + jsonObject = new JsonParser().parse(json).getAsJsonObject(); + } catch (JsonSyntaxException e){ + // Unknown server response. + throw new InvalidServerResponseException(); + } if (jsonObject.get("response_code").getAsInt() == 1) { throw new NoTriviaResultsException(); diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 5e788b4..db021fa 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -83,8 +83,11 @@ Contact us at . Return To Menu - Network error!\nCould not connect to a network.\n\nIf Tor is enabled in the game settings, check if Orbot is running and then try again. - No trivia results!\nWas not able to find trivia questions that satisfied all options. + Network error!\n\nCould not connect to a network. Check if your custom server URL is correct. If Tor is enabled in the game settings, check if Orbot is running and then try again. + No trivia results!\n\nWas not able to find trivia questions that satisfied all options. + Server response error!\n\nCould not parse the server response. The server response may be in a unsupported version. If you are using a custom server, make sure the server URL points to a valid address and then try again. + An unknown error occurred! + Settings