Есть несколько действительно хороших инструментов для разбора XML с открытым исходным кодом, чтобы сделать это намного проще. Например, чтобы решить эту проблему с Simple XML, я хотел бы сделать это следующим образом:
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import org.simpleframework.xml.Serializer;
import org.simpleframework.xml.core.Persister;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import com.squareup.okhttp.OkHttpClient;
public class MainActivity extends Activity {
public static final String TAG = MainActivity.class.getSimpleName();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button b = (Button) findViewById(R.id.button1);
b.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Runnable r = new Runnable() {
@Override
public void run() {
try {
URL website = new URL("http://vestsoft.somee.com/api/scores");
OkHttpClient client = new OkHttpClient();
HttpURLConnection conn = client.open(website);
conn.addRequestProperty("Accept", "application/xml");
InputStream stream = conn.getInputStream();
Serializer serializer = new Persister();
ArrayOfScore scoreArray = serializer.read(ArrayOfScore.class, stream);
// do something with the ArrayScore object here
} catch (Exception err) {
Log.i(TAG, err.toString());
}
}
};
new Thread(r).start();
}
});
}
}
Это ссылается на два других классах, в XML аннотированных классов Java. К ним относятся:
import java.util.List;
import org.simpleframework.xml.ElementList;
import org.simpleframework.xml.Root;
@Root
public class ArrayOfScore {
@ElementList(inline=true,required=false)
private List<Score> scores;
public List<Score> getScores() {
return scores;
}
}
И:
import org.simpleframework.xml.Element;
import org.simpleframework.xml.Root;
@Root(name="Score")
public class Score {
@Element(name="Id",required=false)
Integer Id;
@Element(name="Name",required=false)
String Name;
@Element(name="Points",required=false)
String Points;
@Element(name="dateTime",required=false)
String dateTime;
}
С помощью этой простой модели можно разобрать практически любой XML вы столкнулись и получить разбор в первые объекты класса автоматически. Существуют аналогичные классы для JSON, такие как Gson
Можно ли вставить всю трассировку стека? Я предполагаю, что XML не хорошо отформатирован. – CodeChimp
Как это получить? В "Java Stack Trace Console" нет ничего. – FlipEX
Я думаю, вам нужно фактически загрузить/прочитать данные сначала в буфер, прежде чем вы сможете его разобрать. –