android-openrat

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs

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:
res/values/strings.xml | 4++++
src/de/openrat/android/blog/OpenRatBlog.java | 76++++------------------------------------------------------------------------
src/de/openrat/android/blog/util/ExceptionUtils.java | 27+++++++++++++++++++++++++++
src/de/openrat/android/blog/util/OpenRatClientAsyncTask.java | 108+++++++++++++++++++++++++++++++++++++++++++++++--------------------------------
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; } /**