Gracefully intercept networking interruption errors
This commit is contained in:
@@ -249,10 +249,14 @@ public class MainActivity extends AppCompatActivity {
|
|||||||
int totalImported = 0;
|
int totalImported = 0;
|
||||||
String nextUrl = null;
|
String nextUrl = null;
|
||||||
do {
|
do {
|
||||||
if (mImportDisposable != null && mImportDisposable.isDisposed()) break;
|
if (mImportDisposable != null && mImportDisposable.isDisposed()) {
|
||||||
Open5eApiWrapper.Open5ePageResult page = Open5eApiWrapper.fetchPage(nextUrl);
|
throw new InterruptedException("Open5e import was cancelled");
|
||||||
|
}
|
||||||
|
Open5eApiWrapper.Open5ePageResult page = Open5eApiWrapper.fetchPage(nextUrl, () -> mImportDisposable != null && mImportDisposable.isDisposed());
|
||||||
for (Monster monster : page.monsters) {
|
for (Monster monster : page.monsters) {
|
||||||
if (mImportDisposable != null && mImportDisposable.isDisposed()) break;
|
if (mImportDisposable != null && mImportDisposable.isDisposed()) {
|
||||||
|
throw new InterruptedException("Open5e import was cancelled");
|
||||||
|
}
|
||||||
try {
|
try {
|
||||||
((MonsterCardsApplication) getApplication()).getMonsterRepository()
|
((MonsterCardsApplication) getApplication()).getMonsterRepository()
|
||||||
.saveMonster(monster)
|
.saveMonster(monster)
|
||||||
|
|||||||
@@ -12,11 +12,13 @@ import com.majinnaibu.monstercards.models.Monster;
|
|||||||
import java.io.BufferedReader;
|
import java.io.BufferedReader;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.io.InputStreamReader;
|
import java.io.InputStreamReader;
|
||||||
|
import java.io.InterruptedIOException;
|
||||||
import java.net.HttpURLConnection;
|
import java.net.HttpURLConnection;
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
import java.nio.charset.StandardCharsets;
|
import java.nio.charset.StandardCharsets;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.function.BooleanSupplier;
|
||||||
|
|
||||||
import com.majinnaibu.monstercards.utils.Logger;
|
import com.majinnaibu.monstercards.utils.Logger;
|
||||||
|
|
||||||
@@ -29,7 +31,7 @@ public class Open5eApiWrapper {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@NonNull
|
@NonNull
|
||||||
public static Open5ePageResult fetchPage(@Nullable String urlStr) throws Exception {
|
public static Open5ePageResult fetchPage(@Nullable String urlStr, BooleanSupplier isCancelled) throws Exception {
|
||||||
if (urlStr == null || urlStr.isEmpty()) {
|
if (urlStr == null || urlStr.isEmpty()) {
|
||||||
urlStr = BASE_URL;
|
urlStr = BASE_URL;
|
||||||
}
|
}
|
||||||
@@ -52,8 +54,13 @@ public class Open5eApiWrapper {
|
|||||||
BufferedReader reader = new BufferedReader(new InputStreamReader(in, StandardCharsets.UTF_8))) {
|
BufferedReader reader = new BufferedReader(new InputStreamReader(in, StandardCharsets.UTF_8))) {
|
||||||
String line;
|
String line;
|
||||||
while ((line = reader.readLine()) != null) {
|
while ((line = reader.readLine()) != null) {
|
||||||
|
if (isCancelled.getAsBoolean()) {
|
||||||
|
throw new InterruptedException("Open5e network read was cancelled.");
|
||||||
|
}
|
||||||
sb.append(line);
|
sb.append(line);
|
||||||
}
|
}
|
||||||
|
} catch (InterruptedIOException e) {
|
||||||
|
throw new InterruptedException("Open5e network read was cancelled.");
|
||||||
}
|
}
|
||||||
|
|
||||||
String jsonPayload = sb.toString();
|
String jsonPayload = sb.toString();
|
||||||
|
|||||||
Reference in New Issue
Block a user