Android Can';t在未调用Looper.prepare()Graphhopper的线程内创建处理程序

Android Can';t在未调用Looper.prepare()Graphhopper的线程内创建处理程序,android,background-thread,graphhopper,Android,Background Thread,Graphhopper,我遇到了以下错误 logUser("An error happend while creating graph:"+ getErrorMessage()); 其中getErrorMessage()不能在未调用Looper.prepare()的线程内创建处理程序,logUser是一个只显示toast congaing消息的函数 void prepareGraph() { logUser("loading graph (" + Helper.VERSION + "|" + Helper.V

我遇到了以下错误

logUser("An error happend while creating graph:"+ getErrorMessage());
其中getErrorMessage()不能在未调用Looper.prepare()的线程内创建处理程序,logUser是一个只显示toast congaing消息的函数

void prepareGraph() {
    logUser("loading graph (" + Helper.VERSION + "|" + Helper.VERSION_FILE
            + ") ... ");
    new MyAsyncTask<Void, Void, Path>() {
        protected Path saveDoInBackground(Void... v) throws Exception {
            GraphHopper tmpHopp = new GraphHopper().forAndroid();
            tmpHopp.contractionHierarchies(true);
            tmpHopp.load(mapsFolder + currentArea);
            logUser("found graph with " + tmpHopp.getGraph().nodes() + " nodes");
            hopper = tmpHopp;
            return null;
        }

        protected void onPostExecute(Path o) {
            if (hasError()) {
                logUser("An error happend while creating graph:"
                        + getErrorMessage());
            } else {
                logUser("Finished loading graph. Touch to route.");
                calcPath(52.534185, 13.348732, 52.53857,
                        13.41259);
            }

            finishPrepare();
        }
    }.execute();
}
void prepareGraph(){
logUser(“加载图形(“+Helper.VERSION+”|“+Helper.VERSION_文件
+ ") ... ");
新建MyAsyncTask(){
受保护路径saveDoInBackground(Void…v)引发异常{
GraphHopper tmpHopp=新的GraphHopper().forAndroid();
tmpHopp.收缩层次结构(真);
tmpHopp.load(映射文件夹+当前区域);
logUser(“找到了带有“+tmpHopp.getGraph().nodes()+”nodes”的图”);
料斗=tmpHopp;
返回null;
}
受保护的void onPostExecute(路径o){
if(hasError()){
logUser(“创建图形时发生错误:”
+getErrorMessage());
}否则{
日志用户(“已完成加载图形。触按至路线”);
calcPath(52.534185、13.348732、52.53857、,
13.41259);
}
finishPrepare();
}
}.execute();
}

您不能从后台线程执行UI操作

试试这个:

GraphHopper tmpHopp = new GraphHopper().forAndroid();
tmpHopp.contractionHierarchies(true);
tmpHopp.load(mapsFolder + currentArea);
runOnUiThread(new Runnable() {    
    public void run() {
        logUser("found graph with " + tmpHopp.getGraph().nodes() + " nodes");
    }
});
hopper = tmpHopp;
return null;

您不能从后台线程执行UI操作

试试这个:

GraphHopper tmpHopp = new GraphHopper().forAndroid();
tmpHopp.contractionHierarchies(true);
tmpHopp.load(mapsFolder + currentArea);
runOnUiThread(new Runnable() {    
    public void run() {
        logUser("found graph with " + tmpHopp.getGraph().nodes() + " nodes");
    }
});
hopper = tmpHopp;
return null;

您需要在主线程上实例化
AsyncTask
AsyncTask
源代码创建一个
Handler
来调用
onPreExecute()
onPostExecute()
等方法,如果该
Handler
未在主线程上实例化,Android将抛出一个异常,告诉您与
处理程序
交互的线程尚未调用
Looper.prepare()
方法。

您需要在主线程上实例化
异步任务
AsyncTask
源代码创建一个
Handler
来调用
onPreExecute()
onPostExecute()
等方法,如果该
Handler
未在主线程上实例化,Android将抛出一个异常,告诉您与
处理程序
交互的线程尚未调用
Looper.prepare()
方法