我正在开发一个Android项目>>>> 当我尝试在android中的doInBackground()方法中执行任何代码时......它没有给出错误但没有正常运行.... 这是我的代码......
private class DownloadImageTask extends AsyncTask<String, Void, Bitmap>
{
protected Bitmap doInBackground(String... urls)
{
button.setVisibility(View.VISIBLE);
return DownloadImage(urls[0]);
}
protected void onPostExecute(Bitmap result)
{
ImageView img = (ImageView) findViewById(R.id.img);
img.setImageBitmap(result);
}
}
当我删除 button.setVisibility(View.VISIBLE);
时,此代码正常工作我的查询是否可以像doInBackground()方法中的可见性或编程类型那样....
答案 0 :(得分:4)
您必须在 UI 线程中设置可见性,否则它将无法工作。如果您使用不同的线程MessageHandler
,或者可以使用runOnUiThread
(使用runnable)来设置可见性。例如:
runOnUiThread(new Runnable() {
@Override
public void run() {
// set visibility here
}
});
答案 1 :(得分:2)
在doInBackground()方法中,您无法进行UI Realated Operations。
如果你必须做UI相关操作,请使用onPreExcuteMethod()或onPostExcute(),
private class DownloadImageTask extends AsyncTask<String, Void, Bitmap>
{
protected void onPreExcute(){
// Before starting the function.
button.setVisibility(View.VISIBLE);
}
protected Bitmap doInBackground(String... urls)
{
return DownloadImage(urls[0]);
}
protected void onPostExecute(Bitmap result)
{
// after completion of the function.
// button.setVisibility(View.VISIBLE);
ImageView img = (ImageView) findViewById(R.id.img);
img.setImageBitmap(result);
}
}
我认为这样可行,或者你可以根据你的功能使用post Excute方法
答案 2 :(得分:1)
您可以将此行button.setVisibility(View.VISIBLE);
放入asynctask的onPreExcute()
方法
您无法在doInBackground()
中更新自己的用户界面。 How to use AsyncTask in android
答案 3 :(得分:1)
您无法更新doInBackground()
中的任何UI元素,因为此方法在单独的(非UI)线程中执行。
使用onPreExecute()
代替
private class DownloadImageTask extends AsyncTask<String, Void, Bitmap>
{
protected void onPreExecute(){
button.setVisibility(View.VISIBLE);
}
protected Bitmap doInBackground(String... urls)
{
return DownloadImage(urls[0]);
}
protected void onPostExecute(Bitmap result)
{
ImageView img = (ImageView) findViewById(R.id.img);
img.setImageBitmap(result);
}
}
答案 4 :(得分:1)
要在doInBackground中使用UI,则需要使用runOnUiThread。
runOnUiThread(new Runnable() {
public void run() {
// some code #3 (Write your code here to run in UI thread)
}
});
由于