按下Android设备上的后退按钮后Toast没有完成?

问题描述 投票:0回答:3

我正在开发一个付费应用程序,它在启动(从onCreate()方法)应用程序时检查许可证。从服务器接收到响应代码后,随后的回调方法allow()dontAllow()applicationError()执行包含不同的Toasts

现在我的问题是,每当任何Toasts生成,如果突然我按下设备的后面Button在完成Toast然后Toast卡在屏幕上。只有当我从任务列表中删除应用程序时它才会完成。

 private class XYZLicenseCheckerCallback implements LicenseCheckerCallback {

    @Override
    public void allow(int reason) {
        if(isFinishing()) {
            return;
        }

        Toast.makeText(XyzActivity.this,"App purchase verified",Toast.LENGTH_SHORT).show();
        System.out.println("allowed called"+reason);
    }

    @Override
    public void dontAllow(int reason) {
        if(isFinishing()) {
            return;
        }

        displayResult(String.valueOf(reason));
        stopService(serviceIntent);
        Toast.makeText(XyzActivity.this,"App not licensed",Toast.LENGTH_SHORT).show();
        System.out.println("don't allow called"+reason);
    }

    @Override
    public void applicationError(int errorCode) {
        if(isFinishing()) {
            return;
        }

        Toast.makeText(XyzActivity2108.this,"Not able to verify the license,check your internet connection",Toast.LENGTH_SHORT).show();
        // finish();
        System.out.println("app error called"+errorCode);
    }
}

这是我的onBackpressed()方法

@Override
public void onBackPressed() {
    finish();
}

你有什么帮助吗?

java android toast android-toast android-app-licensing
3个回答
0
投票

创建一个全局变量Toast toast;

显示它的用途

toast = Toast.makeText(getContext(), "Hello World", Toast.LENGTH_SHORT);
toast.show();

然后在背面按取消吐司。

@Override
public void onBackPressed() {
    toast.cancel();
    finish();
}

0
投票

为什么不使用快餐​​吧呢? 这是您的应用消息,而不是系统消息。

即使活动结束,您的吐司仍然在屏幕上。 Snackbar没有。

有关详细信息,请参阅stackoverflow中的answer


即使你不想使用零食吧。这似乎不是您的代码中的预期行为。可能导致此问题的原因是长时间运行的线程仍与服务器连接,或尚未完成。检查触发此代码的代码(XYZLicenseCheckerCallback)是否正确执行并且没有使应用程序无响应。

注意:在与UI线程交互时,您必须考虑额外的因素。


0
投票

使用此上下文在构造函数和Toast中传递上下文

 private class XYZLicenseCheckerCallback implements LicenseCheckerCallback {
 Activity mActivity;
 public XYZLicenseCheckerCallback (Activity mActivity){
 this.mActivity= mActivity;
 }
@Override
public void allow(int reason) {
    if(isFinishing()) {
        return;
    }

    Toast.makeText(mActivity,"App purchase verified",Toast.LENGTH_SHORT).show();
    System.out.println("allowed called"+reason);
}

@Override
public void dontAllow(int reason) {
    if(isFinishing()) {
        return;
    }

    displayResult(String.valueOf(reason));
    stopService(serviceIntent);
    Toast.makeText(mActivity,"App not licensed",Toast.LENGTH_SHORT).show();
    System.out.println("don't allow called"+reason);
}

@Override
public void applicationError(int errorCode) {
    if(isFinishing()) {
        return;
    }

    Toast.makeText(mActivity,"Not able to verify the license,check your internet connection",Toast.LENGTH_SHORT).show();
    // finish();
    System.out.println("app error called"+errorCode);
 }
 }
© www.soinside.com 2019 - 2024. All rights reserved.