Connection error handling
This commit is contained in:
parent
ba8b96c22e
commit
d478b474fb
4 changed files with 66 additions and 24 deletions
app/src/main
java/info/nerull7/mysqlbrowser
res
|
@ -86,7 +86,7 @@ public class LoginFragment extends Fragment implements View.OnClickListener, Asy
|
||||||
url = urlTextbox.getText().toString();
|
url = urlTextbox.getText().toString();
|
||||||
|
|
||||||
if(Static.isNetworkConnected(getActivity())) {
|
if(Static.isNetworkConnected(getActivity())) {
|
||||||
asyncDatabaseConnector = new AsyncDatabaseConnector(login, password, url);
|
asyncDatabaseConnector = new AsyncDatabaseConnector(login, password, url, getActivity().getResources());
|
||||||
asyncDatabaseConnector.setBooleanReturnListener(this);
|
asyncDatabaseConnector.setBooleanReturnListener(this);
|
||||||
asyncDatabaseConnector.setOnPostExecuteListener(this);
|
asyncDatabaseConnector.setOnPostExecuteListener(this);
|
||||||
asyncDatabaseConnector.checkLogin();
|
asyncDatabaseConnector.checkLogin();
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
package info.nerull7.mysqlbrowser.db;
|
package info.nerull7.mysqlbrowser.db;
|
||||||
|
|
||||||
|
import android.content.res.Resources;
|
||||||
import android.os.AsyncTask;
|
import android.os.AsyncTask;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
import android.widget.ArrayAdapter;
|
import android.widget.ArrayAdapter;
|
||||||
|
@ -12,12 +13,17 @@ import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.io.InputStreamReader;
|
import java.io.InputStreamReader;
|
||||||
import java.io.UnsupportedEncodingException;
|
import java.io.UnsupportedEncodingException;
|
||||||
|
import java.net.ConnectException;
|
||||||
import java.net.HttpURLConnection;
|
import java.net.HttpURLConnection;
|
||||||
|
import java.net.SocketException;
|
||||||
|
import java.net.SocketTimeoutException;
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
import java.net.URLEncoder;
|
import java.net.URLEncoder;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
import info.nerull7.mysqlbrowser.R;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Created by nerull7 on 07.07.14.
|
* Created by nerull7 on 07.07.14.
|
||||||
* Database connector using Async calls
|
* Database connector using Async calls
|
||||||
|
@ -39,6 +45,8 @@ public class AsyncDatabaseConnector {
|
||||||
|
|
||||||
private String database;
|
private String database;
|
||||||
|
|
||||||
|
private final Resources resources;
|
||||||
|
|
||||||
private BooleanReturnListener booleanReturnListener;
|
private BooleanReturnListener booleanReturnListener;
|
||||||
private IntegerReturnListener integerReturnListener;
|
private IntegerReturnListener integerReturnListener;
|
||||||
private StringReturnListener stringReturnListener;
|
private StringReturnListener stringReturnListener;
|
||||||
|
@ -48,10 +56,11 @@ public class AsyncDatabaseConnector {
|
||||||
public static String errorMsg;
|
public static String errorMsg;
|
||||||
private OnPostExecuteListener onPostExecuteListener;
|
private OnPostExecuteListener onPostExecuteListener;
|
||||||
|
|
||||||
public AsyncDatabaseConnector(String login, String password, String url){
|
public AsyncDatabaseConnector(String login, String password, String url, Resources resources){
|
||||||
this.login = login;
|
this.login = login;
|
||||||
this.password = password;
|
this.password = password;
|
||||||
this.url = url;
|
this.url = url;
|
||||||
|
this.resources = resources;
|
||||||
|
|
||||||
booleanReturnListener=null;
|
booleanReturnListener=null;
|
||||||
stringReturnListener=null;
|
stringReturnListener=null;
|
||||||
|
@ -104,8 +113,9 @@ public class AsyncDatabaseConnector {
|
||||||
if(listReturnListener!=null) {
|
if(listReturnListener!=null) {
|
||||||
listReturnListener.onListReturn(list);
|
listReturnListener.onListReturn(list);
|
||||||
}
|
}
|
||||||
|
errorMsg = error;
|
||||||
}
|
}
|
||||||
}, onPostExecuteListener);
|
}, onPostExecuteListener, resources);
|
||||||
downloader.execute(urlQuery);
|
downloader.execute(urlQuery);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -119,8 +129,9 @@ public class AsyncDatabaseConnector {
|
||||||
} catch (JSONException e) { e.printStackTrace(); }
|
} catch (JSONException e) { e.printStackTrace(); }
|
||||||
if(matrixReturnListener!=null)
|
if(matrixReturnListener!=null)
|
||||||
matrixReturnListener.onMatrixReturn(list);
|
matrixReturnListener.onMatrixReturn(list);
|
||||||
|
errorMsg = error;
|
||||||
}
|
}
|
||||||
}, onPostExecuteListener);
|
}, onPostExecuteListener, resources);
|
||||||
downloader.execute(urlQuery);
|
downloader.execute(urlQuery);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -161,10 +172,9 @@ public class AsyncDatabaseConnector {
|
||||||
errorMsg = data;
|
errorMsg = data;
|
||||||
listenerData = false;
|
listenerData = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
booleanReturnListener.onBooleanReturn(listenerData);
|
booleanReturnListener.onBooleanReturn(listenerData);
|
||||||
}
|
}
|
||||||
}, onPostExecuteListener);
|
}, onPostExecuteListener, resources);
|
||||||
downloader.execute(actionUrlBuilder(ACTION_LOGIN));
|
downloader.execute(actionUrlBuilder(ACTION_LOGIN));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -226,8 +236,9 @@ public class AsyncDatabaseConnector {
|
||||||
public void onFinished(String data, String error) {
|
public void onFinished(String data, String error) {
|
||||||
if(integerReturnListener!=null)
|
if(integerReturnListener!=null)
|
||||||
integerReturnListener.onIntegerReturn(Integer.parseInt(data));
|
integerReturnListener.onIntegerReturn(Integer.parseInt(data));
|
||||||
|
errorMsg = error;
|
||||||
}
|
}
|
||||||
}, onPostExecuteListener);
|
}, onPostExecuteListener, resources);
|
||||||
downloader.execute(urlQuery);
|
downloader.execute(urlQuery);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -280,8 +291,9 @@ public class AsyncDatabaseConnector {
|
||||||
if(stringReturnListener!=null){
|
if(stringReturnListener!=null){
|
||||||
stringReturnListener.onStringReturn(data);
|
stringReturnListener.onStringReturn(data);
|
||||||
}
|
}
|
||||||
|
errorMsg = error;
|
||||||
}
|
}
|
||||||
}, onPostExecuteListener);
|
}, onPostExecuteListener, resources);
|
||||||
downloader.execute(request);
|
downloader.execute(request);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -321,8 +333,9 @@ public class AsyncDatabaseConnector {
|
||||||
if(stringReturnListener!=null){
|
if(stringReturnListener!=null){
|
||||||
stringReturnListener.onStringReturn(data);
|
stringReturnListener.onStringReturn(data);
|
||||||
}
|
}
|
||||||
|
errorMsg = error;
|
||||||
}
|
}
|
||||||
}, onPostExecuteListener);
|
}, onPostExecuteListener, resources);
|
||||||
downloader.execute(request);
|
downloader.execute(request);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -378,14 +391,16 @@ public class AsyncDatabaseConnector {
|
||||||
private OnFinishedListener onFinishedListener;
|
private OnFinishedListener onFinishedListener;
|
||||||
private OnPostExecuteListener onPostExecuteListener;
|
private OnPostExecuteListener onPostExecuteListener;
|
||||||
private String errorString;
|
private String errorString;
|
||||||
|
private Resources resources;
|
||||||
|
|
||||||
public static final String CONNECTION_REQUEST_METHOD = "GET";
|
public static final String CONNECTION_REQUEST_METHOD = "GET";
|
||||||
public static final int CONNECTION_TIMEOUT = 15000;
|
public static final int CONNECTION_TIMEOUT = 15000;
|
||||||
public static final int READ_TIMEOUT = 10000;
|
public static final int READ_TIMEOUT = 10000;
|
||||||
|
|
||||||
Downloader(OnFinishedListener onFinishedListener, OnPostExecuteListener onPostExecuteListener){
|
Downloader(OnFinishedListener onFinishedListener, OnPostExecuteListener onPostExecuteListener, Resources resources){
|
||||||
this.onFinishedListener = onFinishedListener;
|
this.onFinishedListener = onFinishedListener;
|
||||||
this.onPostExecuteListener = onPostExecuteListener;
|
this.onPostExecuteListener = onPostExecuteListener;
|
||||||
|
this.resources = resources;
|
||||||
errorString = null;
|
errorString = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -400,22 +415,42 @@ public class AsyncDatabaseConnector {
|
||||||
urlConnection.setReadTimeout(READ_TIMEOUT);
|
urlConnection.setReadTimeout(READ_TIMEOUT);
|
||||||
urlConnection.setConnectTimeout(CONNECTION_TIMEOUT);
|
urlConnection.setConnectTimeout(CONNECTION_TIMEOUT);
|
||||||
urlConnection.setRequestMethod(CONNECTION_REQUEST_METHOD);
|
urlConnection.setRequestMethod(CONNECTION_REQUEST_METHOD);
|
||||||
urlConnection.connect();
|
|
||||||
|
|
||||||
if(urlConnection.getResponseCode() == HttpURLConnection.HTTP_OK) {
|
try {
|
||||||
try {
|
urlConnection.connect();
|
||||||
inputStream = urlConnection.getInputStream();
|
|
||||||
response = readStream(inputStream);
|
if (urlConnection.getResponseCode() == HttpURLConnection.HTTP_OK) {
|
||||||
} finally {
|
try {
|
||||||
if(inputStream!=null)
|
inputStream = urlConnection.getInputStream();
|
||||||
inputStream.close();
|
response = readStream(inputStream);
|
||||||
urlConnection.disconnect();
|
} finally {
|
||||||
|
if (inputStream != null)
|
||||||
|
inputStream.close();
|
||||||
|
urlConnection.disconnect();
|
||||||
|
}
|
||||||
|
return response;
|
||||||
|
} else {
|
||||||
|
errorString = "ERROR " + urlConnection.getResponseCode() + ": " + urlConnection.getResponseMessage();
|
||||||
}
|
}
|
||||||
return response;
|
} catch (Exception e) {
|
||||||
|
parseException(e);
|
||||||
}
|
}
|
||||||
else {
|
return null;
|
||||||
errorString = "ERROR "+urlConnection.getResponseCode()+": "+urlConnection.getResponseMessage();
|
}
|
||||||
return null;
|
|
||||||
|
private void parseException(Exception e){
|
||||||
|
if(e instanceof SocketException){
|
||||||
|
if(e.getMessage().contains("ECONNREFUSED")) {
|
||||||
|
errorString = resources.getString(R.string.error_connection_refused);
|
||||||
|
} else if(e.getMessage().contains("EHOSTUNREACH")) {
|
||||||
|
errorString = resources.getString(R.string.error_connection_unreachable);
|
||||||
|
} else {
|
||||||
|
errorString = "Exception: " + e.getClass();
|
||||||
|
}
|
||||||
|
} else if (e instanceof SocketTimeoutException){
|
||||||
|
errorString = resources.getString(R.string.error_connection_timeout);
|
||||||
|
} else {
|
||||||
|
errorString = "Exception: " + e.getClass();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -440,7 +475,7 @@ public class AsyncDatabaseConnector {
|
||||||
protected String doInBackground(String... strings) {
|
protected String doInBackground(String... strings) {
|
||||||
try {
|
try {
|
||||||
String data = httpRequest(strings[0]);
|
String data = httpRequest(strings[0]);
|
||||||
onFinishedListener.onFinished(data, errorMsg); // Can't be null cos we demand listener in constructor
|
onFinishedListener.onFinished(data, errorString); // Can't be null cos we demand listener in constructor
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
|
|
|
@ -37,6 +37,9 @@
|
||||||
<string name="error_no_databases">Brak dostępnych baz</string>
|
<string name="error_no_databases">Brak dostępnych baz</string>
|
||||||
<string name="error_no_save">Twoje dane <b>NIE</b> zostaną zapisane! Czy chciałbyś kontynuować?</string>
|
<string name="error_no_save">Twoje dane <b>NIE</b> zostaną zapisane! Czy chciałbyś kontynuować?</string>
|
||||||
<string name="error_remove">Ten wpis zostanie usunięty z bazy. Tej akcji <b>NIE MOŻNA</b> cofnąć! Czy chciałbyś kontynuować?</string>
|
<string name="error_remove">Ten wpis zostanie usunięty z bazy. Tej akcji <b>NIE MOŻNA</b> cofnąć! Czy chciałbyś kontynuować?</string>
|
||||||
|
<string name="error_connection_timeout">Przekroczono czas połączenia</string>
|
||||||
|
<string name="error_connection_reset">Połączenie zostało zrestartowane</string>
|
||||||
|
<string name="error_connection_unreachable">No route to host</string>
|
||||||
|
|
||||||
<string name="pref_entries_per_page">Ustaw limit wpisów na stronę</string>
|
<string name="pref_entries_per_page">Ustaw limit wpisów na stronę</string>
|
||||||
<string name="login_settings">Poświadczenia logowania</string>
|
<string name="login_settings">Poświadczenia logowania</string>
|
||||||
|
|
|
@ -43,6 +43,10 @@
|
||||||
<string name="error_no_databases">No available databases</string>
|
<string name="error_no_databases">No available databases</string>
|
||||||
<string name="error_no_save">Your data will <b>NOT</b> be saved! Would you like to continue?</string>
|
<string name="error_no_save">Your data will <b>NOT</b> be saved! Would you like to continue?</string>
|
||||||
<string name="error_remove">This entry will be removed from database. This action <b>CAN NOT</b> be reversed! Would you like to continue?</string>
|
<string name="error_remove">This entry will be removed from database. This action <b>CAN NOT</b> be reversed! Would you like to continue?</string>
|
||||||
|
<string name="error_connection_timeout">Connection timeout</string>
|
||||||
|
<string name="error_connection_reset">Connection reset by peer</string>
|
||||||
|
<string name="error_connection_refused">Connection refused</string>
|
||||||
|
<string name="error_connection_unreachable">No route to host</string>
|
||||||
|
|
||||||
<string name="pref_entries_per_page">Set number of entries per page</string>
|
<string name="pref_entries_per_page">Set number of entries per page</string>
|
||||||
<string name="login_settings">Login credentials</string>
|
<string name="login_settings">Login credentials</string>
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue