commit dc9cc233298a7abd3ed6285d020156e41b509cfb
parent fc6d30776c00b07cfcab1f62752dca66f1058680
Author: dankert <devnull@localhost>
Date: Tue, 18 Oct 2011 22:23:00 +0200
AlertDialog zeigen, wenn Serveranfrage nicht durchgeführt werden konnte.
Diffstat:
4 files changed, 100 insertions(+), 115 deletions(-)
diff --git a/res/values/strings.xml b/res/values/strings.xml
@@ -52,4 +52,8 @@
<string name="folder_properties">Eigenschaften</string>
<string name="page_content">Seite</string>
<string name="editor">Inhalt</string>
+ <string name="error_timeout">Zeitablauf</string>
+ <string name="error_io">Verbindungsabbruch</string>
+ <string name="error">Fehler</string>
+ <string name="reason">Grund</string>
</resources>
diff --git a/src/de/openrat/android/blog/OpenRatBlog.java b/src/de/openrat/android/blog/OpenRatBlog.java
@@ -72,63 +72,6 @@ public class OpenRatBlog extends Activity
@Override
public void onClick(View v)
{
- AsyncTask<Void, Void, Void> oldloginTask = new AsyncTask<Void, Void, Void>()
- {
- ProgressDialog dialog = new ProgressDialog(OpenRatBlog.this);
-
- @Override
- protected void onPreExecute()
- {
- dialog.setTitle(R.string.loading);
- dialog.setMessage(getResources().getString(
- R.string.waitingforlogin));
- dialog.show();
- }
-
- @Override
- protected void onPostExecute(Void result)
- {
- dialog.dismiss();
- }
-
- @Override
- protected Void doInBackground(Void... params)
- {
- try
- {
- client.login(prefs.getString("username", ""), prefs
- .getString("password", ""));
-
- // Verbindung und Login waren erfolgreich.
- // Jetzt zur Projekt-Liste wechseln.
- final Intent intent = new Intent(OpenRatBlog.this,
- ProjectActivity.class);
- intent.putExtra(ProjectActivity.CLIENT, client);
- startActivity(intent);
- }
- catch (final IOException e1)
- {
- dialog.dismiss();
- // Verbindung nicht möglich...
- Log.i(this.getClass().getName(), e1.getMessage(),
- e1);
- runOnUiThread(new Runnable()
- {
-
- @Override
- public void run()
- {
- Toast.makeText(OpenRatBlog.this, e1
- .getMessage(), Toast.LENGTH_LONG);
- }
- });
- }
-
- return null;
- }
- };
- // oldloginTask.execute();
-
new OpenRatClientAsyncTask(OpenRatBlog.this, R.string.loading,
R.string.waitingforlogin)
{
@@ -138,27 +81,16 @@ public class OpenRatBlog extends Activity
client.login(prefs.getString("username", ""), prefs
.getString("password", ""));
+ }
+
+ protected void doOnSuccess()
+ {
// Verbindung und Login waren erfolgreich.
// Jetzt zur Projekt-Liste wechseln.
final Intent intent = new Intent(OpenRatBlog.this,
ProjectActivity.class);
intent.putExtra(ProjectActivity.CLIENT, client);
startActivity(intent);
- }
-
- protected void doOnError(final IOException e)
- {
-
- runOnUiThread(new Runnable()
- {
-
- @Override
- public void run()
- {
- Toast.makeText(OpenRatBlog.this,
- e.getMessage(), Toast.LENGTH_LONG);
- }
- });
};
}.execute();
diff --git a/src/de/openrat/android/blog/util/ExceptionUtils.java b/src/de/openrat/android/blog/util/ExceptionUtils.java
@@ -0,0 +1,27 @@
+/**
+ *
+ */
+package de.openrat.android.blog.util;
+
+import java.io.IOException;
+import java.net.SocketTimeoutException;
+
+import de.openrat.android.blog.R;
+
+/**
+ * @author dankert
+ *
+ */
+public class ExceptionUtils
+{
+
+ public static int getResourceStringId( Throwable throwable) {
+
+ if ( throwable instanceof SocketTimeoutException )
+ return R.string.error_timeout;
+ else if ( throwable instanceof IOException )
+ return R.string.error_io;
+ else
+ return R.string.error_io;
+ }
+}
diff --git a/src/de/openrat/android/blog/util/OpenRatClientAsyncTask.java b/src/de/openrat/android/blog/util/OpenRatClientAsyncTask.java
@@ -4,13 +4,13 @@
package de.openrat.android.blog.util;
import java.io.IOException;
-import java.util.List;
+import android.app.AlertDialog;
import android.app.ProgressDialog;
+import android.app.AlertDialog.Builder;
import android.content.Context;
import android.os.AsyncTask;
import android.util.Log;
-import de.openrat.android.blog.FolderEntry;
/**
* @author dankert
@@ -19,79 +19,101 @@ import de.openrat.android.blog.FolderEntry;
public abstract class OpenRatClientAsyncTask extends
AsyncTask<Void, Void, Void>
{
- private ProgressDialog dialog;
+ private ProgressDialog progressDialog;
private Context context;
+ private AlertDialog alertDialog;
+ private IOException error;
- public OpenRatClientAsyncTask(Context context, ProgressDialog dialog)
- {
- this.dialog = dialog;
- this.context = context;
- }
-
- public OpenRatClientAsyncTask(Context context, int title, CharSequence message)
- {
- this.dialog = new ProgressDialog(context);
- dialog.setTitle(title);
- dialog.setMessage(message);
- this.context = context;
- }
-
public OpenRatClientAsyncTask(Context context, int title, int message)
{
- this.dialog = new ProgressDialog(context);
- dialog.setTitle(title);
- dialog.setMessage(context.getResources().getString(message));
this.context = context;
+
+ this.progressDialog = new ProgressDialog(context);
+ progressDialog.setTitle(title);
+ progressDialog.setMessage(context.getResources().getString(message));
}
@Override
- protected void onPreExecute()
+ final protected void onPreExecute()
{
// dialog.setTitle(getResources().getString(R.string.loading));
// dialog.setMessage(getResources().getString(
// R.string.waitingforcontent));
- dialog.show();
+ progressDialog.show();
}
- protected void onPostExecute(List<FolderEntry> result)
- {
- dialog.dismiss();
-
- };
-
+ /**
+ * {@inheritDoc}
+ *
+ * @see android.os.AsyncTask#onPostExecute(java.lang.Object)
+ */
@Override
- protected Void doInBackground(Void... params)
+ final protected void onPostExecute(Void result)
{
- try
+ progressDialog.dismiss();
+
+ if (error != null)
{
- callServer();
+ doOnError(error);
}
- catch (IOException e)
+ else
{
- dialog.dismiss();
- Log.e(this.getClass().getName(), e.getMessage(), e);
+ doOnSuccess();
+ }
+ }
- doOnError(e);
+ /**
+ * Wird aufgerufen, falls die Serveranfrage nicht durchgeführt werden
+ * konnte. Läuft im UI-Thread.
+ *
+ * @param error
+ * Exception, die aufgetreten ist.
+ */
+ protected void doOnError(IOException error)
+ {
+ final Builder builder = new AlertDialog.Builder(this.context);
+ alertDialog = builder.setCancelable(true).create();
+ final int causeRId = ExceptionUtils.getResourceStringId(error);
+ String msg = // this.context.getResources().getString(R.string.reason)
+ // + ":\n\n" +
+ error.getMessage();
+ Throwable t = error;
+ while (t.getCause() != null)
+ {
+ t = t.getCause();
+ msg += ": " + t.getMessage();
}
- return null;
+ alertDialog.setTitle(causeRId);
+ alertDialog.setIcon(android.R.drawable.ic_menu_close_clear_cancel);
+ alertDialog.setMessage(msg);
+ alertDialog.show();
+
}
/**
- * @param e
+ * Wird aufgerufen, falls die Serveranfrage erfolgreich durchgeführt werden
+ * konnte. Läuft im UI-Thread.
*/
- protected void doOnError(IOException e) {
- dialog.setMessage( e.getMessage() );
- dialog.show();
+ protected void doOnSuccess()
+ {
+ }
+
+ @Override
+ protected Void doInBackground(Void... params)
+ {
try
{
- Thread.sleep(2000);
+ callServer();
}
- catch (InterruptedException e1)
+ catch (IOException e)
{
+ Log.e(this.getClass().getName(), e.getMessage(), e);
+ error = e;
}
- dialog.dismiss();
+
+ return null;
}
/**