如果放置在 try catch 的开头,则不会显示 Toast 消息



我在显示吐司消息时遇到问题。 我希望它在最初单击按钮时显示,以便用户知道应用程序正在运行(在我的情况下,生成 QR 码(。 如果我将吐司放在尝试捕获的开头,则单击按钮时它不会立即显示。它仅在生成并显示 QR 码后显示 Toast。 此外,如果我将 toast 放在 try catch 的开头,则在我的 Android 模拟器上显示(显示 QR 码后(,但在我的物理 android 设备上根本不显示(我已允许应用程序权限(。仅当 toast 位于 try catch 结束时时,它才会显示在我的物理设备上。 这让我感到困惑。 我尝试使用一个进度条,它会在按钮单击时运行并在显示二维码后终止,但发现这很难实现。 我认为吐司将是一个简单的选择,因为到目前为止,我已经在整个项目中使用了它们,没有任何问题。 如果有人能帮助我了解如何在单击按钮时立即显示 Toast,而不是在生成和显示 QR 码后显示,将不胜感激。 或者,如果有人可以帮助我包括一个进度条(圆圈(,在单击按钮后运行并在显示二维码后停止,这也将不胜感激,因为我相信这将是最理想的解决方案。

请参阅下面的代码:

public class Generate extensions AppCompatActivity {

public final static int QRcodeWidth = 500 ;
private static final String IMAGE_DIRECTORY = "/QR_Code_Generated";
Bitmap bitmap;
private EditText etQr;
private ImageView ivGenerated;
private Button btn;
private Button clrBtn;
private Button shareBtn;
private ProgressBar progressBar;
private int progressStatus = 0;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_generate);
ivGenerated = (ImageView) findViewById(R.id.iv_generated);
etQr = (EditText) findViewById(R.id.generate_input);
btn = (Button) findViewById(R.id.button);
clrBtn = (Button) findViewById(R.id.clearButton);
shareBtn = (Button) findViewById(R.id.shareButton);

btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (etQr.getText().toString().trim().length() == 0) {
} else {
try {
Toast toast1 = Toast.makeText(Generate.this, "Please Wait, Your QR Code is Generating & will be Saved to your Device... ", Toast.LENGTH_SHORT);
toast1.show();
bitmap = TextToImageEncode(etQr.getText().toString());
ivGenerated.setImageBitmap(bitmap);
String path = saveImage(bitmap);  //give read write permission
// Toast.makeText(Generate.this, "QR Code saved to -> " + path, Toast.LENGTH_SHORT).show(); (if I include this second toast it does not display the first toast1)

} catch (WriterException e) {
e.printStackTrace();
}

}
}
});

我没有发现您的 toast 弹出代码有任何问题,您可以尝试在 toast.show(( 之后添加 250 毫秒的延迟,也许它. 将是一个变通办法。

对于进度条,它非常简单。在 .xlm 文件中创建一个进度条,并将其放在 View.Layout 的中心,您愿意显示它并使其可见性为 FALSE。 你可以试试这个,

progressbar = = (ProgressBar) findViewById(R.id.progressbar);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
progressbar.setVisibility(VISIBLE); // or try View.VISIBLE
if (etQr.getText().toString().trim().length() == 0) {
} else {
try {
Toast toast1 = Toast.makeText(Generate.this, "Please Wait, Your QR Code is Generating & will be Saved to your Device... ", Toast.LENGTH_SHORT);
toast1.show();
bitmap = TextToImageEncode(etQr.getText().toString());
ivGenerated.setImageBitmap(bitmap);
String path = saveImage(bitmap);  //give read write permission
// Toast.makeText(Generate.this, "QR Code saved to -> " + path, Toast.LENGTH_SHORT).show(); (if I include this second toast it does not display the first toast1)

} catch (WriterException e) {
e.printStackTrace();
}
finally {
progressbar.setVisibility(INVISIBLE); // or try View.INVISIBLE
}
}
}
});

最新更新