[英]Android not fetching data from website into ArrayList
我无法让Android将网络资源加载到ArrayList中-无论我做什么,列表都是空的。 如果我没有在线程中运行它,logcat将显示StrictMode$AndroidBlockGuardPolicy.onNetwork
错误。 在Java VM中,它运行良好。 该网站已加载到列表中,我可以获得所需的数据。
这是代码:
public class WeatherData {
public static String data() {
String[] tempsArr = new String[9];
String[] minArr = new String[9];
Calendar calendar = Calendar.getInstance();
String[] weekDay = new String[1];
SimpleDateFormat[] dayFormat = new SimpleDateFormat[1];
dayFormat[0] = new SimpleDateFormat("E");
weekDay[0] = dayFormat[0].format(calendar.getTime());
final ArrayList<String> list = new ArrayList<String>();
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
try {
System.setProperty("http.proxyHost", "cache.mrt.ac.lk");
System.setProperty("http.proxyPort", "3128");
//Document doc = Jsoup.connect(url).timeout(10000).get();
URL link = new URL("https://www.sinoptik.bg/shumen-bulgaria-100727233/10-days");
BufferedReader in = new BufferedReader(new InputStreamReader(link.openStream()));
String inputLine;
String[] arr;
int count = 0;
while ((inputLine = in.readLine()) != null) {
list.add(inputLine);
count++;
}
in.close();
} catch (MalformedURLException me) {
System.out.println(me);
} catch (IOException ioe) {
ioe.printStackTrace();
} catch (Exception e) {
Log.e(TAG, e.getMessage());
}
}
});
thread.start();
dayFormat[0] = new SimpleDateFormat("E");
weekDay[0] = dayFormat[0].format(calendar.getTime());
int idx = 0;
for (
int j = 0; j < list.size() - 550; j++)
{
if (list.get(j).contains(weekDay[0].toString())) {
tempsArr[idx] = getNum(list.get(j + 3));
minArr[idx] = getNum(list.get(j + 5));
idx++;
calendar.add(Calendar.DAY_OF_WEEK, 1);
weekDay[0] = dayFormat[0].format(calendar.getTime());
}
}
return tempsArr[1];
}
我知道它需要优化,但是我要首先使其工作并给我至少一个值(这就是为什么我只使用一个带有一个索引的数组来返回的原因)。 我在调试时看到它正在连接到站点,但是ArrayList为空,它什么也不做。
thread.start();
启动线程后,您将无法获得代码,因为该代码将直接并与线程中的代码并行执行。 因此,即使在与网站建立连接之前,该代码也有可能完成。 难怪您的arraylist为空。
您必须将该代码放在单独的函数中,并且仅在线程完成后才调用该函数。
我已经解决了。 问题出在“ https”连接上,当我将其更改为“ http”时,它下载了该站点。 但是还有另一个问题-它加载了移动版本?!? 我花了一些时间才弄清楚-“ http://m.sinoptik.bg/shumen-bulgaria-100727233/10-days ”,我不得不对数据提取算法进行一些调整以匹配移动站点,但是现在没事。 数据与原始站点相同,减去了约700行数据,甚至更好:)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.