Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/226.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从JSON或XML提要导入数据并在Android中创建列表_Java_Android_Json_Xml_Android Volley - Fatal编程技术网

Java 从JSON或XML提要导入数据并在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

我正在尝试创建一个Android类,创建一个其他应用程序的列表,供以后显示,直到现在,我有以下创建列表的代码(取自谷歌的一个示例):


我的整个方法显然不起作用。有人能帮我实现我所需要的吗?谢谢。

最简单的设置需要:

一种从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;
}