【问题标题】:Android app crashing when toast is run in try catch在try catch中运行toast时Android应用程序崩溃
【发布时间】:2014-10-22 01:10:11
【问题描述】:

我正在创建一个具有登录屏幕的 Android 应用。我所做的是,每当用户单击提交按钮时,它都会运行一个进度对话框。然后调用一个新线程来验证登录。当我尝试在登录内的功能上运行 toast 时,应用程序突然崩溃。我用它做的是这样的:

    loginButton.setOnClickListener(new OnClickListener(){
        @Override
        public void onClick(View v){
               dialog = ProgressDialog.show(MainActivity.this, "", 
                        "Validating user...", true);
            new Thread(new Runnable(){
                public void run(){


                    login();
                }
            }).start();
        }

    });

那么我的登录功能是这样的:

void login(){

try{
//some code
} catch(Exception e){

dialog.dismiss();
Context context = getApplicationContext();
CharSequence text = "Hello toast!";
int duration = Toast.LENGTH_SHORT;

Toast toast = Toast.makeText(context, text, duration);
toast.show();

}

但由于某种原因,一旦进入 catch 函数,应用程序就会突然崩溃只有当我添加 toast 的代码时。我的代码有什么问题,为什么只有在我使用 toast 时才会崩溃?

【问题讨论】:

  • 你看过异常的LogCat了吗?

标签: java android try-catch android-toast


【解决方案1】:

toast 在另一个工作线程中?

你能把吐司放在 runOnUiThread() 中吗?

【讨论】:

  • 我刚刚在 runOnUiThread() 上转移了整个 toast。为什么会这样?是因为我把 toast 放在了一个用来运行登录功能的新线程中吗?
【解决方案2】:

您是否尝试过调试您的代码?当您从线程调用它时,您可能会从 getApplicationContext() 获得空指针。在某处声明变量上下文并使用该变量制作 Toast(如果需要)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-15
    • 1970-01-01
    • 2019-07-25
    • 1970-01-01
    • 1970-01-01
    • 2012-06-26
    相关资源
    最近更新 更多