Azure移动服务,应用程序崩溃(离线同步 - Android)

时间:2014-10-29 11:38:02

标签: android azure azure-mobile-services

我正在尝试运行Android版本的TodoOffine azure移动服务示例,但是当执行推送和拉取命令时,我的应用程序崩溃了。 有谁理解这个问题?

这是来自示例的代码:

new AsyncTask<Void, Void, Void>() {

            @Override
            protected Void doInBackground(Void... params) {
                try {
                    mClient.getSyncContext().push().get();
                    mToDoTable.pull(mPullQuery).get();
                    refreshItemsFromTable();
                } catch (Exception exception) {
                    createAndShowDialog(exception, "Error");
                }
                return null;
            }

        }.execute();

logcat的:

10-29 13:31:16.448  25390-25478/com.example.blog20140807 E/AndroidRuntime﹕ FATAL EXCEPTION: AsyncTask #4
Process: com.example.blog20140807, PID: 25390
java.lang.RuntimeException: An error occured while executing doInBackground()
        at android.os.AsyncTask$3.done(AsyncTask.java:300)
        at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
        at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
        at java.util.concurrent.FutureTask.run(FutureTask.java:242)
        at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
        at java.lang.Thread.run(Thread.java:841)
 Caused by: java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
        at android.os.Handler.<init>(Handler.java:200)
        at android.os.Handler.<init>(Handler.java:114)
        at android.app.Dialog.<init>(Dialog.java:109)
        at android.app.AlertDialog.<init>(AlertDialog.java:114)
        at android.app.AlertDialog$Builder.create(AlertDialog.java:931)
        at com.example.blog20140807.ToDoActivity.createAndShowDialog(ToDoActivity.java:343)
        at com.example.blog20140807.ToDoActivity.createAndShowDialog(ToDoActivity.java:327)
        at com.example.blog20140807.ToDoActivity.access$700(ToDoActivity.java:44)
        at com.example.blog20140807.ToDoActivity$2.doInBackground(ToDoActivity.java:197)
        at com.example.blog20140807.ToDoActivity$2.doInBackground(ToDoActivity.java:188)

1 个答案:

答案 0 :(得分:2)

尝试将对builder.create().show();方法中的createAndShowDialog的调用包装在进入UI线程的runnable中:

private void createAndShowDialog(String message, String title) {
    runOnUiThread(new Runnable() {
        @Override
        public void run() {
            AlertDialog.Builder builder = new AlertDialog.Builder(this);
            builder.setMessage(message);
            builder.setTitle(title);
            builder.create().show();
        }
    });
}