Je ne peux pas charger Android d'une ressource Web dans un ArrayList - quoi que je fasse, la liste est vide. Si je ne l'exécute pas dans un thread, logcat affiche une erreur StrictMode$AndroidBlockGuardPolicy.onNetwork
. En java VM cela fonctionne parfaitement; le site est chargé dans la liste et je peux obtenir les données que je veux.Android ne récupère pas les données du site Web dans ArrayList
Voici le code:
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];
}
Je sais qu'il a besoin d'optimisation, mais je veux d'abord faire fonctionner et me donner au moins une valeur (c'est la raison pour laquelle je ne l'un des tableaux avec un indice pour le retour). Je le vois sur debug il se connecte au site mais le ArrayList est vide et il ne fait rien.
'ne peut pas faire Android pour charger le site Web dans ArrayList'. Android? Vous voulez dire votre application? Votre application Android? – greenapps
En règle générale, vous utilisez une asynctask dans Android pour la mise en réseau –
Oui, lorsque je lance l'application, il me donne une valeur "nulle" à partir de cela. – Rado