Java 从JSON或XML提要导入数据并在Android中创建列表
我正在尝试创建一个Android类,创建一个其他应用程序的列表,供以后显示,直到现在,我有以下创建列表的代码(取自谷歌的一个示例):Java 从JSON或XML提要导入数据并在Android中创建列表,java,android,json,xml,android-volley,Java,Android,Json,Xml,Android Volley,我正在尝试创建一个Android类,创建一个其他应用程序的列表,供以后显示,直到现在,我有以下创建列表的代码(取自谷歌的一个示例): 我的整个方法显然不起作用。有人能帮我实现我所需要的吗?谢谢。最简单的设置需要: 一种从URL读取内容、解析接收到的JSON数组的方法。例如,进入一个(您可以进入): 将收到的信息映射到特定App对象的列表,例如: public static List<App> getAppList(JSONArray array){ List<App&g
我的整个方法显然不起作用。有人能帮我实现我所需要的吗?谢谢。最简单的设置需要: 一种从URL读取内容、解析接收到的JSON数组的方法。例如,进入一个(您可以进入): 将收到的信息映射到特定
App
对象的列表,例如:
public static List<App> getAppList(JSONArray array){
List<App> appList = new ArrayList<>();
for (int i = 0; i < array.length(); i++) {
JSONObject object = array.getJSONObject(i);
appList.add(buildAppInfo(object.getString("category"), object.getString("title"), object.getString("description"), object.getString("developer"), object.getString("packageName"), object.getString("iconImageUrl"), object.getString("bgImageUrl")));
}
return appList;
}
公共静态列表以获取详细信息)
您可以使用更高级的工具,例如或来使用RESTful服务,但是我建议您从这个简单的方法开始,直到您更加熟悉Java生态系统
[更新]
我已经用这个答案的代码做了一个修改,所以你可以修改它。您还可以将其用作样板文件,以使用SpringBoot构建所需的rest服务。(查看最新通过的travisCI服务版本的实时部署)
[另一个更新]
如果您仍然不知道,这里有一个完整的android应用程序,它使用一个android应用程序在这个答案上编写的代码,使用RESTful服务提供的列表(“应用程序”json对象的json数组)(是的,您可以将此应用程序作为一个功能齐全的android studio项目导入):
请记住,这是一个基本的例子,使用了我能为初学者想出的最简单的方法。如果您在Java生态系统中继续编写代码一段时间,您将发现更高级的工具,这些工具可能更适合您的项目,只要您有足够的经验来理解它们的正确用法。您必须将JsonObject转换为数组格式,如ContentValues,hashMap,然后将该数组直接提供给listview,JsonObject将不起作用。如果能够在Android Studio中导入该数组,您的示例GitHub代码将非常有用。您可以将其作为IntelliJ标准java IDE中的maven java项目导入。我不知道他们的Android Studio是否支持Android项目以外的任何东西(试着从git repo中寻找类似import…maven项目的东西)。如果不是这样,就没有必要让后端成为android应用程序,但您可以将resttest类作为在项目中使用它的工具(唯一需要的依赖关系是org.json,您可以按照mvnrepository链接上的指定将其添加到gradle构建中)(jackson和slf4j logger也包含在main方法中,用于很好地输出处理后的列表,但您可以删除这些行,并使用列表执行您实际想要执行的操作),并且您仍然可以使用maven从命令行为android应用程序构建和运行此项目作为测试后端服务器(不需要花哨的IDE,如果希望控制器类输出不同的内容,只需编辑控制器类,然后使用maven cli重新打包并重新启动服务,让它随时可以被您的android studio项目应用程序使用)如果您想了解我的意思,请查看。
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
public static JSONArray parseJsonFromUrl(String uri) throws IOException, JSONException {
JSONArray array = null;
try (Scanner sn = new Scanner(new URL(uri).openStream(), "UTF-8")){
array = new JSONArray(sn.useDelimiter("\\A").next());
}
return array;
}
public static List<App> getAppList(JSONArray array){
List<App> appList = new ArrayList<>();
for (int i = 0; i < array.length(); i++) {
JSONObject object = array.getJSONObject(i);
appList.add(buildAppInfo(object.getString("category"), object.getString("title"), object.getString("description"), object.getString("developer"), object.getString("packageName"), object.getString("iconImageUrl"), object.getString("bgImageUrl")));
}
return appList;
}