簡體   English   中英

在Android設備上按返回按鈕后,烤面包還沒有完成?

[英]Toast not getting finished after pressing back button on android device?

我正在開發一個付費應用程序,該應用程序從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();
}

請您幫忙嗎?

創建一個全局變量Toast toast;

為了顯示它使用

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

然后在背面按取消吐司。

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

為什么不使用小吃店呢?
這是您的應用消息,而不是系統消息。

即使活動結束,您的吐司面包仍會顯示在屏幕上。 小吃吧沒有。

有關更多詳細信息,請參考stackoverflow的答案


即使您不想使用小吃欄。 從您的代碼看來,這似乎不是預期的行為。 可能導致該問題的原因是線程長時間運行 ,該線程仍與服務器連接,或者尚未完成 檢查觸發this(XYZLicenseCheckerCallback)的代碼是否正確執行,並且沒有使應用程序沒有響應。

注意 :與UI線程進行交互時,您必須格外注意。

在構造函數中傳遞上下文,並在此上下文中傳遞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);
 }
 }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM