我正在开发一个付费应用程序,该应用程序从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();
}
请问您身边的帮助吗?
答案 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);
}
}