gpt4 book ai didi

java - onPostExecute 未运行

转载 作者:行者123 更新时间:2023-12-01 06:14:03 27 4
gpt4 key购买 nike

我有一个单独的类(不是 Activity)来管理图像及其属性。

在这个类(Image.class)中,我还创建了一个 AsynkTask 来从网络下载位图。一切正常,除了 AsyncTask 继续运行,没有触发 onPostExecute() 方法。

有人可以帮我吗?

我在主 Activity 中的循环内实例化此类。

public class InstaImage {

public URL thumbUrl;
public URL lowresUrl;
public URL standardresUrl;

private URL url;
private Bitmap bmp;

public InstaImage(URL _thumb, URL _low, URL _standard ) {
this.thumbUrl = _thumb;
this.lowresUrl = _low;
this.standardresUrl = _standard;
}

public Bitmap getBitmap(String resolution) {

switch(resolution) {
case "thumb":
url = thumbUrl;
break;

case "low":
url = lowresUrl;
break;

case "standard":
url = standardresUrl;
break;
}

DownloadImageTask dit = new DownloadImageTask();

dit.execute();

// --- TEST ASYNC STATUS ---
while(dit != null) {

if(dit.getStatus() == AsyncTask.Status.FINISHED) {
Log.i("ASYNC", "END2!!");
break;
}
else {
Log.w("ASYNC WAITING", dit.getStatus().toString());
}
}

// --- END TEST ASYNC STATUS ---

return bmp;
}

private class DownloadImageTask extends AsyncTask<String, Void, Bitmap> {
URLConnection conn = null;
InputStream in = null;
Bitmap _bmp = null;

@Override
protected Bitmap doInBackground(String... urls) {
Log.i("ASYNC","STARTING!!");
try {
conn = url.openConnection();

if (conn != null) {

in = conn.getInputStream();

_bmp = BitmapFactory.decodeStream(in);

in.close();
}
}
catch (IOException e) {
e.printStackTrace();
}
Log.i("ASYNC","END0!!");

return _bmp;
}


protected void onPostExecute(Bitmap result) {
super.onPostExecute(result);
Log.i("ASYNC","END1!!");
bmp = result;
}
}
}

最佳答案

您对线程的工作方式存在误解。您正在使用异步调用,然后忙于等待它完成。

// --- TEST ASYNC STATUS ---
while(dit != null) {

if(dit.getStatus() == AsyncTask.Status.FINISHED) {
Log.i("ASYNC", "END2!!");
break;
}
else {
Log.w("ASYNC WAITING", dit.getStatus().toString());
}
}

// --- END TEST ASYNC STATUS ---

return bmp;

抱歉,但您可能需要阅读有关该主题的内容。

我建议创建一个类 InstaImageView extends ImageView 并在其中添加一个异步 URI 加载器。我确信这段代码已经被写了一千遍了。如果您不了解线程和异步编程,您可以直接复制它。

关于java - onPostExecute 未运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28247633/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com