Progressdialog 关于Rajawali Vuforia示例的进度对话框

Progressdialog 关于Rajawali Vuforia示例的进度对话框,progressdialog,vuforia,rajawali,Progressdialog,Vuforia,Rajawali,加载.obj模型时,可以显示进度对话框。我试图在RajawaliVuforiaExampleRenderer.java中调用ProgressDialog,但它说“无法在未调用Looper.prepare()的线程内创建处理程序。” 我在这里粘贴了部分代码: 受保护的void initScene(){ 编辑: 我已经阅读了Abhishek Agarwal的评论并更新了渲染器部分的代码,现在我在加载模型时调用ProgressDialog时遇到了问题,下面是我的UI线程代码 public void o

加载.obj模型时,可以显示进度对话框。我试图在RajawaliVuforiaExampleRenderer.java中调用ProgressDialog,但它说“无法在未调用Looper.prepare()的线程内创建处理程序。”

我在这里粘贴了部分代码:

受保护的void initScene(){

编辑: 我已经阅读了Abhishek Agarwal的评论并更新了渲染器部分的代码,现在我在加载模型时调用ProgressDialog时遇到了问题,下面是我的UI线程代码

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setScreenOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
    // receive file path
    String filePath = this.getIntent().getStringExtra("FullFilePath");
    Log.i(filePath, "FullFilePath:" + filePath);

    waitDialog = ProgressDialog.show(this, "", "Loading", true);
    waitDialog.show();
    new ModelLoader().execute();

}

@Override
protected void setupTracker() {
    int result = initTracker(TRACKER_TYPE_MARKER);
    if (result == 1) {
        result = initTracker(TRACKER_TYPE_IMAGE);
        if (result == 1) {
            super.setupTracker();
        } else {RajLog.e("Couldn't initialize image tracker.");
        }
    } else {
        RajLog.e("Couldn't initialize marker tracker.");
    }}

protected void initApplicationAR() {
    super.initApplicationAR();
    createImageMarker("marker.xml");
}

protected void initRajawali() {
    super.initRajawali();
    mRenderer = new ModelRenderer(this);
    mRenderer.setSurfaceView(mSurfaceView);
    super.setRenderer(mRenderer);

    mUILayout = this;
    mUILayout.setContentView(mLayout, new LayoutParams(
            LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
}

private class ModelLoader extends AsyncTask<Void, Void, Void> {

    @Override
    protected Void doInBackground(Void... params) {
        startVuforia();
        return null;
    }

    @Override
    protected void onPostExecute(Void result) {
        super.onPostExecute(result);
        waitDialog.dismiss();
    }
}
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
设置屏幕方向(活动信息、屏幕方向和横向);
//接收文件路径
String filePath=this.getIntent().getStringExtra(“FullFilePath”);
Log.i(filePath,“FullFilePath:”+filePath);
waitDialog=ProgressDialog.show(此为“,”正在加载“,”为true);
waitDialog.show();
新建ModelLoader().execute();
}
@凌驾
受保护的void setupTracker(){
int result=initTracker(跟踪器类型标记);
如果(结果==1){
结果=初始跟踪器(跟踪器类型图像);
如果(结果==1){
super.setupTracker();
}else{RajLog.e(“无法初始化图像跟踪器”);
}
}否则{
e(“无法初始化标记跟踪器”);
}}
受保护的void initApplicationAR(){
super.initApplicationAR();
createImageMarker(“marker.xml”);
}
受保护的void initRajawali(){
super.initRajawali();
mrender=新模型渲染器(此);
mrender.setSurfaceView(mSurfaceView);
超级设置渲染器(mrender);
mUILayout=这个;
mUILayout.setContentView(mLayout,新布局参数(
LayoutParams.WRAP_内容,LayoutParams.WRAP_内容);
}
私有类ModelLoader扩展了AsyncTask{
@凌驾
受保护的Void doInBackground(Void…参数){
startVuforia();
返回null;
}
@凌驾
受保护的void onPostExecute(void结果){
super.onPostExecute(结果);
waitDialog.discouse();
}
}

进度对话框可以在UIThread上显示。因此,在主线程上显示进度对话框而不是在GLThread下。您可以使用处理程序在threadUI上显示:

`private Handler mHandler = new Handler();
...
mHandler.post(new Runnable() {
        @Override
        public void run() {
            view_progressBar.setProgress(val);
        }
    });`
`private Handler mHandler = new Handler();
...
mHandler.post(new Runnable() {
        @Override
        public void run() {
            view_progressBar.setProgress(val);
        }
    });`