我正在尝试从维基百科中检索文本以在Android应用上使用。我正在使用Java。 我要做的第一件事是从特定文章中检索部分,向用户显示这些部分,当用户点击一个部分时,使用另一个http请求获取部分文本。
所以,这两个请求是:
http://en.wikipedia.org/w/api.php?format=json&action=parse&page=Valencia_Cathedral&prop=sections
然后这一个:
我的问题是:我应该创建哪种类型的Java对象来存储信息,然后使用.fromJSON()
将其转换为这些类?
感谢@NathanZ,我创建了这两个类:
public class WikiResponseSections {
String title;
List<Section> sections;
}
public class Section {
int toclevel;
String level;
String line;
String number;
String index;
String fromtitle;
int byteoffset;
String anchor;
}
但是,当我通过Gson将HTTP响应转换为这些objets,并尝试读取字段'title'的值时,会触发一个错误:JavaNullPointerException。 这是我的转换代码:
InputStream stream = null;
try {
stream = entity.getContent();
} catch (IllegalStateException e) {
Log.e("Stream","ERROR illegalstateexception");
} catch (IOException e) {
Log.e("Stream","ERROR exception");
}
reader = new BufferedReader(new InputStreamReader(stream));
GsonBuilder bldr = new GsonBuilder();
Gson gson = bldr.create();
WikiResponse = gson.fromJson(reader, WikiResponseSections.class);
if (WikiResponse != null){
Log.i("WikiResponse",WikiResponse.getTitle()); //The error triggers HERE
publishProgress();
}
else
Log.i("WikiResponse","NULL");
}
再次感谢您的帮助
答案 0 :(得分:0)
您可以使用Google's Gson库。 它的工作原理如下:
InputStream source = ...; // your code to get the Json from a url
Gson gson = new Gson();
Reader reader = new InputStreamReader(source);
MyResponse response = gson.fromJson(reader, MyResponse.class);
MyResponse
是你的对象。创建MyResponse
时,请为字段指定与Json字段相同的名称和类型
MyResponse类可以如下:
public class MyResponse{
String title;
ArrayList<sections>;
}
public class sections{
int toclevel;
String level;
String line;
String number;
String fromtitle;
long byteoffset;
String anchor;
}
public class WikiResponseParse{
Parse parse;
public class Parse{
String title, text;
}
}
如果您不能使用json字段名称,因为它不符合Java:
添加以下导入:
import com.google.gson.annotations.SerializedName;
在你班上:
@SerializedName("*")
public String star;