gpt4 book ai didi

java - Android:函数在 Thread 中不起作用,但在其他情况下起作用(尝试添加 ProgressDialog)

转载 作者:行者123 更新时间:2023-11-29 22:30:04 27 4
gpt4 key购买 nike

所以我有一个正在开发的小应用程序,可以从网络上抓取漫画并将它们显示在我的手机上。没什么特别的,只是用它来学习绳索。调用 comicReload() 的函数;完成大部分工作并在应用程序中多次调用它(在第一次运行时,以及当用户单击某些按钮时。函数如下:

public void comicReload () throws IOException {
//clears some Vectors that have things in them from the last run
imagetitles.clear();
imagetext.clear();
imagelinks.clear();

//forms the link it will connect to, and connects
connector = siteBase + Integer.toString(comicNumber);
doc = Jsoup.connect(connector).get();
media = doc.select("[src]");

//gets the required media from the site
for (Element src : media) {
if (src.tagName().equals("img"));
imagetitles.add(src.attr("alt"));
imagetext.add(src.attr("title"));
imagelinks.add(src.attr("src"));
}

//some variables I could probably get rid of, but it's easy to read
Integer titlesize = imagetitles.size();
Integer textsize = imagetext.size();
Integer linkssize = imagelinks.size();

comicTitle = (imagetitles.get(titlesize-4));
hoverText = (imagetext.get(textsize-4));
comicLink = (imagelinks.get(linkssize-4));

//gets the picture I am looking for along with the associated text
URL url = new URL(comicLink);
InputStream is = (InputStream) url.getContent();
image = Drawable.createFromStream(is, "src name");

//finally puts the scraped information into the layout
comicView.setImageDrawable(image);
title.setText(comicTitle);
htext.setText(hoverText);
}

它在被调用时工作 100% 正常,但它在 3G 上有点慢,所以我尝试添加一个 ProgressDialog 以在它加载时显示。这是我的尝试(这是我以前只有 comicReload(); 的地方运行的代码)

pd = ProgressDialog.show(this, "Getting Comic", "Loading", true, false);
new Thread(new Runnable() {
public void run() {
try {
comicReload();
} catch (IOException e) {
Log.i("ComicReloadFail","Sam");
}
pd.dismiss();
return;
}
}).start();

Thread 本身运行良好,当我用 comicReload() 放置一些随机代码来执行 try-catch block 时;在里面一切都花花公子。第二次我将 comicReload() 放回那里,但是,运行该应用程序会导致 ProgressDialog 微调器在应用程序强制关闭之前旋转几秒钟。是什么原因造成的?为什么 comicReload() 在线程中时停止工作。我只想要一种方法来执行该方法,并在它工作时运行一个微调器。

在此先感谢大家,我知道要阅读的内容很多。

最佳答案

您不能在与创建 UI 的线程不同的线程中执行与 UI 相关的更新。

尝试使用处理程序

public static final Handler handlerVisibility = new Handler() {
public void handleMessage(Message msg) {
int visibility = msg.getData().getInt("visibility");
view.setVisibility(visibility);
}
};

关于java - Android:函数在 Thread 中不起作用,但在其他情况下起作用(尝试添加 ProgressDialog),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4394391/

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