在Android设备上按返回按钮后,烤面包还没有完成?

时间:2018-12-28 17:46:33

标签: java android toast android-toast android-app-licensing

我正在开发一个付费应用程序,该应用程序从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();
}

请问您身边的帮助吗?

3 个答案:

答案 0 :(得分:0)

创建全局变量Toast toast;

要显示它,请使用

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

然后在背面按取消烤面包。

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

答案 1 :(得分:0)

为什么不使用小吃栏?
这是您的应用消息,而不是系统消息。

  

即使活动结束,您的吐司面包仍会显示在屏幕上。小吃吧没有。

有关更多详细信息,请参阅stackoverflow上的answer


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

注意:与UI线程交互时,您必须格外考虑。

答案 2 :(得分: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);
 }
 }