runOnUiThread:无法触摸视图,异常

尼德霍格

我知道现在已经多次发布此消息,但是似乎没有任何东西可以解决我的问题。我在UI线程上创建了一个“加载对话框”,然后启动另一个正在做一些网络工作的线程,并通过接口在完成网络连接后获得回调。问题是,完成后,即使使用“ runOnUIThread”,我也无法删除加载对话框。这是代码:

public void onClickLoginButton (View view) {
    if (!((EditText)findViewById(R.id.textNickname)).getText().toString().isEmpty() &&
            !((EditText)findViewById(R.id.textPassword)).getText().toString().isEmpty()) {
        loggingIn = new ProgressDialog(this);
        loggingIn.setTitle("Login");
        loggingIn.setMessage("Wait while logging in...");
        loggingIn.show();

        final LoginInterface callbackInterface = this;

        new Thread(new Runnable() {

            public void run() {
                Networking net = new Networking();
                net.Login(((EditText) findViewById(R.id.textNickname)).getText().toString(), ((EditText) findViewById(R.id.textPassword)).getText().toString(), callbackInterface);
            }
        }).start();
    }
}

完成后,以下是网络工作人员调用的函数:

@Override
public void LoginCallback(final boolean loginSuccess, final boolean isActivated) {
    loggingIn.hide();
    loggingIn = null;

    final Context context = this;

    runOnUiThread(new Runnable() {
        @Override
        public void run() {
            if (loginSuccess && isActivated) {
                loggingIn.hide();
                loggingIn = null;
                finish();
            } else if (loginSuccess == false) {
                Toast.makeText(context, "Login failed! User/Password wrong", Toast.LENGTH_SHORT).show();
            } else {
                Toast.makeText(context, "Login failed! Account not activated", Toast.LENGTH_SHORT).show();
            }
        }
    });

}

这是堆栈跟踪:

04-17 17:06:11.313  13018-13121/com.assigame.nidhoegger.assigame E/AndroidRuntime﹕ FATAL EXCEPTION: Thread-1422
    Process: com.assigame.nidhoegger.assigame, PID: 13018
    android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
            at android.view.ViewRootImpl.checkThread(ViewRootImpl.java:6122)
            at android.view.ViewRootImpl.requestLayout(ViewRootImpl.java:850)
            at android.view.View.requestLayout(View.java:16431)
            at android.view.View.setFlags(View.java:8908)
            at android.view.View.setVisibility(View.java:6036)
            at android.app.Dialog.hide(Dialog.java:299)
            at com.assigame.nidhoegger.assigame.Login.LoginCallback(Login.java:72)
            at com.assigame.nidhoegger.assigame.Networking.Login(Networking.java:134)
            at com.assigame.nidhoegger.assigame.Login$1.run(Login.java:64)
            at java.lang.Thread.run(Thread.java:841)
04-17 17:06:11.719  13018-13018/com.assigame.nidhoegger.assigame E/WindowManager﹕ android.view.WindowLeaked: Activity com.assigame.nidhoegger.assigame.Login has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView{42284588 G.E..... R......D 0,0-684,324} that was originally added here
            at android.view.ViewRootImpl.<init>(ViewRootImpl.java:366)
            at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:248)
            at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:69)
            at android.app.Dialog.show(Dialog.java:286)
            at com.assigame.nidhoegger.assigame.Login.onClickLoginButton(Login.java:56)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:515)
            at android.view.View$1.onClick(View.java:3818)
            at android.view.View.performClick(View.java:4438)
            at android.view.View$PerformClick.run(View.java:18422)
            at android.os.Handler.handleCallback(Handler.java:733)
            at android.os.Handler.dispatchMessage(Handler.java:95)
            at android.os.Looper.loop(Looper.java:136)
            at android.app.ActivityThread.main(ActivityThread.java:5017)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:515)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
            at dalvik.system.NativeStart.main(Native Method)
邦尼兹

您将调用该loggingIn.hide()方法两次,并且第一次不在UI线程上。将您的代码更改为此:

@Override

public void LoginCallback(final boolean loginSuccess, final boolean isActivated) {
    final Context context = this;
    runOnUiThread(new Runnable() {
        @Override
        public void run() {
            if (loginSuccess && isActivated) {
                loggingIn.hide();
                loggingIn = null;
                finish();
            } else if (loginSuccess == false) {
                Toast.makeText(context, "Login failed! User/Password wrong", Toast.LENGTH_SHORT).show();
            } else {
                Toast.makeText(context, "Login failed! Account not activated", Toast.LENGTH_SHORT).show();
            }
        }
    });

}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

只有创建视图层次结构的原始线程才能触摸其视图异常

来自分类Dev

无法解析方法.runOnUiThread

来自分类Dev

重新出现后视图无法触摸

来自分类Dev

当视图上方有一个视图时,ViewPager无法响应该触摸事件

来自分类Dev

重复运行runOnUiThread()会导致异常

来自分类Dev

多点触摸多视图

来自分类Dev

禁用视图上的触摸

来自分类Dev

发生异常时无法显示MVC错误视图

来自分类Dev

无法捕获eowise的粘滞头标头的子视图(RecyclerView)的触摸事件

来自分类Dev

触摸板行为异常

来自分类Dev

andEngine Null异常在触摸

来自分类Dev

AsyncTask:无法从publishProgress更新UI。错误:只有创建视图层次结构的原始线程才能触摸其视图。

来自分类Dev

AsyncTask:无法从publishProgress更新UI。错误:只有创建视图层次结构的原始线程才能触摸其视图。

来自分类Dev

Android-在子视图触摸上忽略父视图触摸

来自分类Dev

触摸其他线程的视图

来自分类Dev

触摸视图时的“奇数”行为

来自分类Dev

取消对视图的多次触摸

来自分类Dev

检测源自超级视图的触摸

来自分类Dev

根据触摸事件更改视图

来自分类Dev

触摸视图时的“奇数”行为

来自分类Dev

防止在视图后面发生触摸?

来自分类Dev

无法在runonuithread中将值设置为textview

来自分类Dev

UIViewController UIButton无法触摸

来自分类Dev

用户无法触摸-t

来自分类Dev

触摸:无法触摸“测试”:权限被拒绝

来自分类Dev

无法将其他视图控制器与Xcode 6中的自定义可可触摸类相关联

来自分类Dev

Android列表视图异常

来自分类Dev

圆形视图路径异常

来自分类Dev

葫芦-无法测试触摸事件

Related 相关文章

热门标签

归档