gpt4 book ai didi

java - 无法从网页下载 html 源

转载 作者:太空宇宙 更新时间:2023-11-04 14:12:32 25 4
gpt4 key购买 nike

我在 Android 中从网页下载 html 源代码时遇到问题。我在不同的线程中运行 http 客户端,它能够获取 html 文本(我记录了结果),但后来当我尝试使用下载的 html 文本时,主线程中的变量似乎为空。我认为问题正在上升,因为我无法同步线程,但我现在不知道如何解决它。当我调试代码时,全局变量包含运行函数中的数据,但是当我加入线程并查看 join 方法时,该变量为空。这是我的代码(我在不同线程中运行的类)

公共(public)类(class) LutrijaHr {

public String url;
public String savedHtml;
public LutrijaHr(String s){
this.url = s;
savedHtml = "";
}

public String donwloadSource(String passedUrl) throws Exception{
HttpClient client = new DefaultHttpClient();
HttpGet request = new HttpGet(passedUrl);
HttpResponse response = client.execute(request);

String html = "";
InputStream in = response.getEntity().getContent();
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
StringBuilder str = new StringBuilder();
String line = null;
while((line = reader.readLine()) != null)
{
str.append(line);
}
in.close();
html = str.toString();
savedHtml += html;
return html;
}

}

主类的部分代码:

String test = "";
LutrijaHr lhr = new LutrijaHr("https://www.lutrija.hr");
@Override
public void run() {


try {

test = lhr.donwloadSource(lhr.url);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
lhr.savedHtml = test;
Log.d("test", test);

}

这是我尝试加入线程但变量为空的部分

if (v.getId() == R.id.checkNumber){
Thread t = new Thread(new LotoMain(), "Page thread");
t.start();
try {
t.join();
etCheckedNumber.setText(lhr.savedHtml);
String smrki = test;
Log.d("testdsadasd", lhr.savedHtml);
Log.d("BOZO BOZO" ,test) ;

} catch (InterruptedException e) {
// TODO Auto-generated catch block
Log.d("BOZO BOZO BOZO" ,test) ;
e.printStackTrace();

}
}

我想在不使用 android asynctask 类的情况下解决这个问题,因为我想了解一些有关线程及其操作方式的知识。

最佳答案

使用“锁定”将此代码添加到主类中:

public Lock workingLock = new ReentrantLock();
String test = "";
LutrijaHr lhr = new LutrijaHr("https://www.lutrija.hr");
@Override
public void run() {


try {
workingLock.lock();
test = lhr.donwloadSource(lhr.url);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
lhr.savedHtml = test;

workingLock.unlock;

Log.d("test", test);

}

现在将其用于:

if (v.getId() == R.id.checkNumber){ Thread t = new Thread(new LotoMain(), "页面线程");

    try {

try {
workingLock.lock();

} catch (Exception e) {

e.printStackTrace();
}

etCheckedNumber.setText(lhr.savedHtml);
String smrki = test;
Log.d("testdsadasd", lhr.savedHtml);
Log.d("BOZO BOZO" ,test) ;

workingLock.unlock();

} catch (InterruptedException e) {
// TODO Auto-generated catch block
Log.d("BOZO BOZO BOZO" ,test) ;
e.printStackTrace();

}
}

关于java - 无法从网页下载 html 源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28136517/

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