Toast Message 如果放在 try catch 的开头将不会显示
Toast Message will not display if placed at the beggining of the try catch
我在显示 Toast 消息时遇到问题。我希望它在最初单击按钮时显示,以便用户知道该应用程序正在运行(在我的例子中,生成二维码)。如果我将 toast 放在 try catch 的开头,单击按钮时它不会立即显示。只有在二维码生成并显示后,它才会显示吐司。此外,如果我将 toast 放在 Android 模拟器上,但在我的物理 android 设备上根本不会显示(我已允许应用程序权限)试着抓。如果 toast 在 try catch 结束时,它只会显示在我的物理设备上。这让我百思不得其解。我尝试使用 ProgressBar,它会在按钮单击时 运行 并在显示 QR 码后终止,但发现这很难实现。我认为 toast 是一个简单的选择,因为直到现在我在整个项目中都使用它们,没有任何问题。如果有人可以帮助我了解如何在单击按钮时立即显示吐司而不是在生成并显示 QR 码后显示,将不胜感激。或者,如果有人可以帮助我在单击按钮后将进度条(圆圈)添加到 运行 并在显示 QR 码后停止,这也将非常感激,因为我相信这将是最多的理想的解决方案。
请看下面的代码:
public class 生成扩展 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.show() 之后添加 250 毫秒的延迟,也许吧。对你来说是个解决办法。
而对于进度条,它非常简单。在您的 .xlm 文件中创建一个进度条 n 将其放在您愿意显示的 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
}
}
}
});
我在显示 Toast 消息时遇到问题。我希望它在最初单击按钮时显示,以便用户知道该应用程序正在运行(在我的例子中,生成二维码)。如果我将 toast 放在 try catch 的开头,单击按钮时它不会立即显示。只有在二维码生成并显示后,它才会显示吐司。此外,如果我将 toast 放在 Android 模拟器上,但在我的物理 android 设备上根本不会显示(我已允许应用程序权限)试着抓。如果 toast 在 try catch 结束时,它只会显示在我的物理设备上。这让我百思不得其解。我尝试使用 ProgressBar,它会在按钮单击时 运行 并在显示 QR 码后终止,但发现这很难实现。我认为 toast 是一个简单的选择,因为直到现在我在整个项目中都使用它们,没有任何问题。如果有人可以帮助我了解如何在单击按钮时立即显示吐司而不是在生成并显示 QR 码后显示,将不胜感激。或者,如果有人可以帮助我在单击按钮后将进度条(圆圈)添加到 运行 并在显示 QR 码后停止,这也将非常感激,因为我相信这将是最多的理想的解决方案。
请看下面的代码:
public class 生成扩展 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.show() 之后添加 250 毫秒的延迟,也许吧。对你来说是个解决办法。
而对于进度条,它非常简单。在您的 .xlm 文件中创建一个进度条 n 将其放在您愿意显示的 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
}
}
}
});