java从JSON或XML提要导入数据,并在Android中创建列表
我正在尝试创建一个Android类,创建一个其他应用程序的列表,供以后显示,直到现在,我有以下创建列表的代码(取自谷歌的一个示例):
public final class AppList {
public static List<App> list;
public static List<App> setupApp() {
list.add(buildAppInfo(
"Browsers",
"chrome",
"description",
"Google Inc.",
"com.安卓.chrome",
"http://...",
"http://..."
));
list.add(buildAppInfo(
"Browsers",
"Firefox",
"description",
"Mozilla",
"com.mozilla.firefox",
"http://...",
"http://..."
));
[An so on...]
return list;
}
private static App buildAppInfo(String category,
String title,
String description,
String developer,
String packageName,
String iconImageUrl,
String bgImageUrl) {
App app = new App();
app.setId(App.getCount());
App.incCount();
app.setTitle(title);
app.setDescription(description);
app.setDeveloper(developer);
app.setCategory(category);
app.setIconImageUrl(iconImageUrl);
app.setBackgroundImageUrl(bgImageUrl);
app.setPackageName(packageName);
return app;
}
}
//From here everything is handled in other activity
相反,我希望从web服务器动态加载详细信息,我可以将其设置为提供JSONArray或XML,然后将该数据放在列表中。就我所读的内容而言,我可以使用截击,但我在截击或Java方面总体上不是很有经验(我只是在路上学习),所以我对如何继续没有太多的想法
在谷歌开发者网站上,我发现了一个example。我在考虑添加如下内容:
public final class AppList {
public static List<App> list;
public static List<App> setupApp() {
/*Json Request*/
String url = "https://json_url/";
JsonObjectRequest jsonObjectRequest = new JsonObjectRequest( Request.Method.GET, url, null,
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
list.add(response);//ADD ITEMS TO LIST HERE
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
}
});
return list;
}
private static App buildAppInfo(String category,
String title,
String description,
String developer,
String packageName,
String iconImageUrl,
String bgImageUrl) {
App app = new App();
app.setId(App.getCount());
App.incCount();
app.setTitle(title);
app.setDescription(description);
app.setDeveloper(developer);
app.setCategory(category);
app.setIconImageUrl(iconImageUrl);
app.setBackgroundImageUrl(bgImageUrl);
app.setPackageName(packageName);
return app;
}
}
从服务器源接收的数据应类似于:
buildAppInfo(
"Browsers",
"Firefox",
"description",
"Mozilla",
"com.mozilla.firefox",
"http://...",
"http://..."
)
buildAppInfo(
"Browsers",
"Firefox",
"description",
"Mozilla",
"com.mozilla.firefox",
"http://...",
"http://..."
)
[...]
//BUT IN JSON FORMAT
我的整个方法显然不起作用。有人能帮我实现我所需要的吗?多谢各位
# 1 楼答案
最简单的设置需要:
一种从URL读取内容、解析接收到的JSON数组的方法。例如,进入JSONArray or JSONObject(可以在mvnrepository上找到):
将收到的信息映射到
List
个特定App
对象,例如:使用XML的方法与此类似,而是使用XML解析器(有关详细信息,请查看How to read XML response from a URL in java?)
您可以使用更高级的工具,例如Jackson Mapper或Spring RestTemplate来使用RESTful服务,但是我建议您从这个简单的方法开始,直到您更加熟悉Java生态系统
[更新]
我已经用这个答案的代码做了一个quick demo,所以你可以修改它。您还可以将其用作样板文件,以使用SpringBoot构建所需的rest服务。(查看https://elcodedocle-jsontest.herokuapp.com/apps了解最新通过的travisCI服务构建的实时部署)
[另一个更新]
如果您仍然不知道,这里有一个完整的android应用程序使用列表(json数组中的“app”json对象)通过RESTful服务提供,使用android应用程序(是的,您可以将此作为一个全功能的android studio项目导入):https://github.com/elcodedocle/android-resttest
请记住,这是一个基本的例子,使用了我能为初学者想出的最简单的方法。如果您在Java生态系统中继续编写代码一段时间,您将发现更高级的工具,这些工具可能更适合您的项目,只要您有足够的经验来理解它们的正确用法