Java 在进度条完成后尝试设置ImageBitmap会导致错误
这是我第一次在我的应用程序中实现水平进度条 目标是在进度条完成后,应用程序显示toast消息和图像位图 toast消息运行正常,但图像使应用程序强制关闭 这是我的代码:Java 在进度条完成后尝试设置ImageBitmap会导致错误,java,android,android-progressbar,Java,Android,Android Progressbar,这是我第一次在我的应用程序中实现水平进度条 目标是在进度条完成后,应用程序显示toast消息和图像位图 toast消息运行正常,但图像使应用程序强制关闭 这是我的代码: Button buttonProceed = (Button) findViewById(R.id.buttonProceed); buttonProceed.setOnClickListener(new View.OnClickListener() { @Override public
Button buttonProceed = (Button) findViewById(R.id.buttonProceed);
buttonProceed.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
progressBar = new ProgressDialog(v.getContext());
progressBar.setCancelable(true);
progressBar.setMessage("Processing");
progressBar.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
progressBar.setProgress(0);
progressBar.setMax(100);
progressBar.show();
progressBarStatus = 0;
fileProcess = 0;
String toastMessage = "Citra host berhasil ditanam citra watermark dan disimpan di internal storage";
final Toast toast = Toast.makeText(getApplicationContext(), toastMessage, Toast.LENGTH_SHORT);
toast.setGravity(Gravity.CENTER_HORIZONTAL, 0, 0);
final ImageView resultImageView = (ImageView) findViewById(R.id.viewResult);
new Thread(new Runnable() {
public void run() {
while (progressBarStatus < 100) {
progressBarStatus = progressMarker();
try{
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
progressBarHandler.post(new Runnable() {
public void run() {
progressBar.setProgress(progressBarStatus);
}
});
}
if (progressBarStatus >= 100) {
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
progressBar.dismiss();
toast.show();
//the resultBitmap variable is declared in global
resultImageView.setImageBitmap(resultBitmap);
}
}
}).start();
}
});
}
Button-buttonprocessed=(Button)findViewById(R.id.buttonprocessed);
ButtonProced.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
progressBar=newprogressdialog(v.getContext());
progressBar.setCancelable(真);
progressBar.setMessage(“处理”);
progressBar.setProgressStyle(ProgressDialog.STYLE_水平);
progressBar.setProgress(0);
设置最大进度条(100);
progressBar.show();
progressBarStatus=0;
fileProcess=0;
String toastMessage=“Citra主机berhasil ditanam Citra水印和disimpan di内部存储”;
final Toast Toast=Toast.makeText(getApplicationContext(),toastMessage,Toast.LENGTH\u SHORT);
toast.setGravity(重心水平,0,0);
最终ImageView结果ImageView=(ImageView)findViewById(R.id.viewResult);
新线程(newrunnable()){
公开募捐{
而(状态<100){
progressBarStatus=progressMarker();
试一试{
睡眠(1000);
}捕捉(中断异常e){
e、 printStackTrace();
}
progressBarHandler.post(新的Runnable(){
公开募捐{
progressBar.setProgress(progressBar状态);
}
});
}
如果(progressBarStatus>=100){
试一试{
《睡眠》(2000年);
}捕捉(中断异常e){
e、 printStackTrace();
}
progressBar.disclose();
toast.show();
//resultBitmap变量以全局形式声明
resultImageView.setImageBitmap(resultBitmap);
}
}
}).start();
}
});
}
那么,有人能帮我找出代码中的错误吗
尊敬 问题是不允许您在新线程中更改UI。为此,可以使用AsyncTask而不是线程 以下是一些例子: 您应该调用
progressBar.setProgress(progressBarStatus)代码>在异步任务的onProgressUpdate(字符串…进度)
中
并且应该在onPostExecute(字符串结果)
中调用此代码:
因为在主UI线程上调用了onPostExecute
中的代码。若你们想在后台处理,那个么它是最好的选择。
progressBar.dismiss();
toast.show();
//the resultBitmap variable is declared in global
resultImageView.setImageBitmap(resultBitmap);