Tworzę swoją pierwszą "większą" aplikację i utknąłem.
Mam klasę:
//xml
public class BackgroundAsyncTask extends AsyncTask<String, Void, String>{
@Override
protected String doInBackground(String ...params) {
URL url = null;
String returnedResult = "";
try {
url = new URL(params[0]);
} catch (MalformedURLException e) {
e.printStackTrace();
}
HttpURLConnection conn = null;
try {
conn = (HttpURLConnection)url.openConnection();
conn.setReadTimeout(10000);
conn.setConnectTimeout(20000);
conn.setRequestMethod("GET");
conn.setDoInput(true);
conn.connect();
InputStream is = conn.getInputStream();
parser.setInput(is, null);
returnedResult = getLoadedXmlValues(parser);
} catch (IOException e) {
e.printStackTrace();
} catch (XmlPullParserException e) {
e.printStackTrace();
}
return returnedResult;
}
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
if(!s.equals("")){
displayXmlContent.setText(s);
}
}
private String getLoadedXmlValues(XmlPullParser parser) throws XmlPullParserException, IOException {
int eventType = parser.getEventType();
String name = null;
pogoda.BackgroundAsyncTask.Entity mEntity = new pogoda.BackgroundAsyncTask.Entity();
while (eventType != XmlPullParser.END_DOCUMENT){
if(eventType == XmlPullParser.START_TAG){
name = parser.getName();
if(name.equals("act_model_date")){
mEntity.act_model_date = parser.nextText();
}
}
eventType = parser.next();
}
return mEntity.act_model_date.replace(" ","");
}
public class Entity{
public String act_model_date;
}
}
Wszystko super
//xml
pogoda.BackgroundAsyncTask backgroundAsyncTask = new pogoda.BackgroundAsyncTask();
backgroundAsyncTask.execute(xmlPath);
try {
xmlPullParserFactory = XmlPullParserFactory.newInstance();
xmlPullParserFactory.setNamespaceAware(false);
parser = xmlPullParserFactory.newPullParser();
} catch (XmlPullParserException e) {
e.printStackTrace();
}
displayXmlContent = (TextView)findViewById(R.id.display_xml);
Ładnie wyświetla się w text view.
Natomiast najważniejszym elementem jest wyświetlenie aktualnej pogody, a żeby całość zadziałała muszę pobrać aktualną datę z xml.
Robię to w ten sposób:
new pogoda.DownloadImageFromInternet((ImageView) findViewById(R.id.imageView16))
.execute("http://www.meteo.pl/um/metco/mgram_pict.php?ntype=0u&fdate="+displayXmlContent+"&row=461&col=215&lang=pl");
Natomiast +displayXmlContent+ nie działa.
Proszę Was o pomoc. Co zrobić, aby dodać do linku dane z XML? Zamienić zmienną w stinga? Jak to zrobić?
Z góry dziękuję!
Pytanie dodatkowe, także mam z tym problem. Próbowałem "wszystkie" i niestety nadal nie działa.
Otóż... co jeśli pobierany plik XML ma więcej danych? Które nazywają się tak samo, a mają inne wartości? Serdeczna prośba o podpowiedź.