In my application, I am trying to parse XML and show the data in a ListView using an ArrayAdapter. Whenever I run the application, the application just shows the action bar and a blank screen where the ListView and data should be. There is no errors in the LogCat, so it seems to just be a problem displaying the data, but I can not find what the problem is. I am trying to parse this XML:
<system>
<name>11 Com</name>
<rightascension>12 20 43</rightascension>
<declination>+17 47 34</declination>
<distance>110.6</distance>
<star>
<mass>2.7</mass>
<radius>19</radius>
<magV>4.74</magV>
<magB errorminus="0.02" errorplus="0.02">5.74</magB>
<magJ errorminus="0.334" errorplus="0.334">2.943</magJ>
<magH errorminus="0.268" errorplus="0.268">2.484</magH>
<magK errorminus="0.346" errorplus="0.346">2.282</magK>
<metallicity>-0.35</metallicity>
<spectraltype>G8 III</spectraltype>
<planet>
<name>11 Com b</name>
<list>Confirmed planets</list>
<mass>19.4</mass>
<period>326.03</period>
<semimajoraxis>1.29</semimajoraxis>
<eccentricity>0.231</eccentricity>
<discoverymethod>RV</discoverymethod>
<lastupdate>11/12/23</lastupdate>
<discoveryyear>2008</discoveryyear>
<temperature>799.7</temperature>
</planet>
<name>11 Com</name>
<temperature>4742.0</temperature>
</star>
<videolink>http://youtu.be/qyJXJJDrEDo</videolink>
And here is the Star.java:
public class Star {
//Star Info
private String starName;
private String starMass;
private String starRadius;
private String starMagV;
//TODO Add support for plus or minus error in measurement
private String starMagB;
private String starMagJ;
private String starMagH;
private String starMagK;
private String starMetallicity;
private String starSpectralType;
private String starTemp;
public Star(String starName, String starMass, String starRadius, String starMagV, String starMagB, String starMagJ, String starMagH, String starMagK, String starMetallicity, String starSpectralType, String starTemp) {
this.starName = starName;
this.starMass = starMass;
this.starRadius = starRadius;
this.starMagV = starMagV;
this.starMagB = starMagB;
this.starMagJ = starMagJ;
this.starMagH = starMagH;
this.starMagK = starMagK;
this.starMetallicity = starMetallicity;
this.starSpectralType = starSpectralType;
this.starTemp = starTemp;
}
public Star() {
this.starName = null;
this.starMass = null;
this.starRadius = null;
this.starMagV = null;
this.starMagB = null;
this.starMagJ = null;
this.starMagH = null;
this.starMagK = null;
this.starMetallicity = null;
this.starSpectralType = null;
this.starTemp = null;
}
/*
* Star Getters and Setters
*/
public String getStarName() {
return starName;
}
public void setStarName(String starName) {
this.starName = starName;
}
public String getStarMass() {
return starMass;
}
public void setStarMass(String starMass) {
this.starMass = starMass;
}
public String getStarRadius() {
return starRadius;
}
public void setStarRadius(String starRadius) {
this.starRadius = starRadius;
}
//Star magnitude Setter and Getters
public String getStarMagV() {
return starMagV;
}
public void setStarMagV(String starMagV) {
this.starMagV = starMagV;
}
public String getStarMagB() {
return starMagB;
}
public void setStarMagB(String starMagB){
this.starMagB = starMagB;
}
public String getStarMagH() {
return starMagH;
}
public void setStarMagH(String starMagH){
this.starMagH = starMagH;
}
public String getStarMagJ() {
return starMagJ;
}
public void setStarMagJ(String starMagJ){
this.starMagJ = starMagJ;
}
public String getStarMagK() {
return starMagK;
}
public void setStarMagK(String starMagK){
this.starMagK = starMagK;
}
public String getStarMetallicity() {
return starMetallicity;
}
public void setStarMetallicity(String starMetallicity) {
this.starMetallicity = starMetallicity;
}
public String getStarSpectralType() {
return starSpectralType;
}
public void setStarSpectralType(String starSpectralType) {
this.starSpectralType = starSpectralType;
}
public String getStarTemp() {
return starTemp;
}
public void setStarTemp(String starTemp) {
this.starTemp = starTemp;
}
public String toString() {
return "Star Name: " + starName + "/n Mass: " + starMass + "/n Radius: " + starRadius + "/n Mag V: " + starMagV + "/n Mag B: " + starMagB + "/n Mag H: " + starMagH + "/n Mag J: " + starMagJ + "/n Mag K: " + starMagK + "/n Metallicity: " + starMetallicity + "/n Spectral Type: " + starSpectralType + "/n Temperature: " + starTemp;
}
}
And this is the XMLPullParserStar.java class:
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import org.xmlpull.v1.XmlPullParserFactory;
import beans.System;
import beans.*;
public class XMLPullParserStar {
List<Star> stars;
private Star star;
public String starText;
public XMLPullParserStar() {
stars = new ArrayList<Star>();
}
public List<Star> getStar() {
return stars;
}
public List<Star> parse(InputStream is) {
XmlPullParserFactory factory = null;
XmlPullParser parser = null;
try {
factory = XmlPullParserFactory.newInstance();
factory.setNamespaceAware(true);
parser = factory.newPullParser();
parser.setInput(is, null);
int eventType = parser.getEventType();
while (eventType != XmlPullParser.END_DOCUMENT) {
String tagname = parser.getName();
switch (eventType) {
case XmlPullParser.START_TAG:
if (tagname.equalsIgnoreCase("star")) {
star = new Star();
}
break;
case XmlPullParser.TEXT:
starText = parser.getText();
break;
case XmlPullParser.END_TAG:
if (tagname.equalsIgnoreCase("name")) {
star.setStarName(starText);
//skip(parser);
} else if (tagname.equalsIgnoreCase("radius")) {
star.setStarRadius(starText);
} else if (tagname.equalsIgnoreCase("magv")) {
star.setStarMagV(starText);
} else if (tagname.equalsIgnoreCase("magb")) {
star.setStarMagB(starText);
} else if (tagname.equalsIgnoreCase("magj")) {
star.setStarMagJ(starText);
} else if (tagname.equalsIgnoreCase("magh")) {
star.setStarMagH(starText);
} else if (tagname.equalsIgnoreCase("magk")) {
star.setStarMagK(starText);
} else if (tagname.equalsIgnoreCase("metallicity")) {
star.setStarMetallicity(starText);
} else if (tagname.equalsIgnoreCase("spectraltype")) {
star.setStarSpectralType(starText);
} else if (tagname.equalsIgnoreCase("temperature")) {
star.setStarTemp(starText);
} else if (tagname.equalsIgnoreCase("name")) {
star.setStarName(starText);
}
break;
default:
break;
}
eventType = parser.next();
}
} catch (XmlPullParserException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return stars;
}
}
And here is the MainActivity.java:
import android.app.Activity;
import android.app.ActionBar;
import android.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.os.Build;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import org.xmlpull.v1.XmlPullParserException;
import java.io.IOException;
import java.util.List;
import beans.*;
import beans.Star;
import xml.XMLPullParserStar;
public class MainActivity extends Activity {
ListView listView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
listView = (ListView) findViewById(R.id.list);
List<Star> systems = null;
try {
XMLPullParserStar parser = new XMLPullParserStar();
systems = parser.parse(getAssets().open("1RXS1609.xml"));
ArrayAdapter<Star> adapter =
new ArrayAdapter<Star>(this, R.layout.list_item, systems);
listView.setAdapter(adapter);
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
When I run the application, the application loads, but where the ListView should be with the star data, nothing shows up. It is just a blank white.