Hallo Android-Gemeinde,
ich bin neu hier im Forum und auch in der App-Programmierung für Android.
Ich versuche eine Wetter-App zu programmieren und habe dabei ein Problem:
In meiner main Activity habe ich zwei Buttons, über die ich per Intent jeweils eine andere Unteractivity aufrufe.
In der Unteractivity möchte ich dann die XML-Daten über eine separate Parser-Klasse auslesen und anschließend per TextView innerhalb einer ListView
anzeigen lassen.
Code der Hautactivity:
public class HFTLWeather3Main extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
public void gotoForecast(final View view) {
switch (view.getId()){
case R.id.bt_to_forecast:
startActivity(new Intent(getApplicationContext(), HFTLforecast.class));
break;
case R.id.bt_to_current:
startActivity(new Intent(getApplicationContext(), HFTLcurrent.class));
break;
}
}
}
Alles anzeigen
In der Unteractivity mache ich dann folgendes:
package hftl.weather.app3;
import java.util.ArrayList;
import java.util.HashMap;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
import android.app.ListActivity;
import android.os.Bundle;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.SimpleAdapter;
public class HFTLcurrent extends ListActivity {
//URL of WebService
static final String URL = "http://www.myweather2.com/developer/forecast.ashx?uac=gVic27DtnJ&query=51.23,6.79&temp_unit=c";
// XML node keys
static final String KEY_CURRENT_WEATHER = "curren_weather";
static final String KEY_CURRENT_TEMP = "temp";
static final String KEY_CURRENT_SPEED = "speed";
static final String KEY_CURRENT_DIR = "dir";
static final String KEY_CURRENT_HUMIDITY = "humidity";
static final String KEY_CURRENT_PRESSURE = "pressure";
static final String KEY_CURRENT_WEATHER_TEXT = "weather_text";
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.hftlcurrent);
ArrayList<HashMap<String, String>> collected_information = new ArrayList<HashMap<String, String>>();
XMLParser parser = new XMLParser();
String xml = parser.getXmlFromUrl(URL); // getting XML
Document doc = parser.getDomElement(xml); // getting DOM element
NodeList nl_current = doc.getElementsByTagName(KEY_CURRENT_WEATHER);
// looping through all item nodes <item>
for (int i = 0; i < nl_current.getLength(); i++) {
// creating new HashMap
HashMap<String, String> element_map = new HashMap<String, String>();
Element e = (Element) nl_current.item(i);
// adding each child node to HashMap key => value
element_map.put(KEY_CURRENT_TEMP, "Aktuelle Temperatur: " + parser.getValue(e, KEY_CURRENT_TEMP));
element_map.put(KEY_CURRENT_SPEED, "Windgeschwindigkeit in kph: " + parser.getValue(e, KEY_CURRENT_SPEED));
element_map.put(KEY_CURRENT_DIR, "Windrichtung: " + parser.getValue(e, KEY_CURRENT_DIR));
element_map.put(KEY_CURRENT_HUMIDITY, "Luftfeuchtigkeit in %: " + parser.getValue(e, KEY_CURRENT_HUMIDITY));
element_map.put(KEY_CURRENT_PRESSURE, "Luftdruck in Bar: " + parser.getValue(e, KEY_CURRENT_PRESSURE));
element_map.put(KEY_CURRENT_WEATHER_TEXT, parser.getValue(e, KEY_CURRENT_WEATHER_TEXT));
// adding collected_information to ArrayList
collected_information.add(element_map);
}
//ListView l = (ListView) findViewById(R.id.listView1);
// Adding collected_information to ListView
ListAdapter adapter = new SimpleAdapter(getApplicationContext(), collected_information,
R.layout.hftlcurrent_singleitem,
new String[] { KEY_CURRENT_TEMP/*, KEY_CURRENT_SPEED, KEY_CURRENT_DIR, KEY_CURRENT_HUMIDITY, KEY_CURRENT_PRESSURE*/},
new int[] {R.id.curr_temp_label/*, R.id.curr_speed_label, R.id.curr_dir_label, R.id.curr_humidity_label, R.id.curr_pressure_label*/});
setListAdapter(adapter);
// l.setAdapter(adapter);
}
}
Alles anzeigen
Komisch ist, dass ich den eigentlichen Wetter-Code vorher in einem separatem Projekt getestet habe, in der er direkt in der Main-Activity aufgerufen wurde. Da hat das hanze auch prima geklappt. Nur jetzt leider nicht mehr.
Ich glaube, dass das an den Verknüpfungen von ListView und den TextViews oder so liegt, aber ich finde den Fehler nicht.
Bin seit drei Tagen am googlen und verzweifeln... und schließlich hier gelandet.
Kann mir jemand von Euch einen kleinen Tipp geben?
Achso: hier noch den Code der Layout-Files:
Unteractivity:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
<ListView
android:id="@+id/listView1"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
</ListView>
</LinearLayout>
</LinearLayout>
Alles anzeigen
Item-Definition des ListViews:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:id="@+id/curr_temp_label"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textColor="#dc6800"
android:textSize="16sp"
android:textStyle="bold"
android:paddingTop="6dip"
android:paddingBottom="2dip" />
<TextView
android:id="@+id/curr_speed_label"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#acacac"
android:textStyle="bold"
android:gravity="left"/>
<TextView
android:id="@+id/curr_dir_label"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#acacac"
android:textStyle="bold"
android:gravity="left"/>
<TextView
android:id="@+id/curr_humidity_label"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#acacac"
android:textStyle="bold"
android:gravity="left"/>
<TextView
android:id="@+id/curr_pressure_label"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#acacac"
android:textStyle="bold"
android:gravity="left"/>
<TextView
android:id="@+id/tv_tv_curr_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#acacac"
android:textStyle="bold"
android:gravity="left"/>
</LinearLayout>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
</LinearLayout>
</LinearLayout>
Alles anzeigen
Vielen Dank für Eure Hilfe!
Viele Grüße
cold_chardonnay