Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/351.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时出现问题_Java_Android_Retrofit - Fatal编程技术网

Java 从后端解析JSON时出现问题

Java 从后端解析JSON时出现问题,java,android,retrofit,Java,Android,Retrofit,由于我一直在从事一个需要从后端接收JSON的Android项目,我使用springboot2.1.7在Java中编写了JSON 从后端来看,它是正常的,可以工作。但是从Android的角度来看,我无法解析变量。 当我尝试使用构造分析变量时: JSONArray JSONArray=新的JSONArray(变量); 然后我收到了JSONArray中的JSONArray()无法应用于com.package.Model的信息。我也尝试了不同的方法来解决这个问题: 后端 @RequestMapping

由于我一直在从事一个需要从后端接收
JSON
的Android项目,我使用springboot2.1.7在Java中编写了
JSON

从后端来看,它是正常的,可以工作。但是从Android的角度来看,我无法解析变量。 当我尝试使用构造分析变量时:

JSONArray JSONArray=新的JSONArray(变量);
然后我收到了JSONArray中的JSONArray()无法应用于
com.package.Model
的信息。我也尝试了不同的方法来解决这个问题:

后端

@RequestMapping(value=“/approachh”,method=RequestMethod.GET)
@应答器
公共列表getList(){
List categoriesList=新建ArrayList();
categoriesList=categoriesRepository.findAll();
返回分类列表;
}
JSON响应

{
“名单”:[
{
“id”:1,
“类别名称”:“类别1”,
“子类别”:[
{
“id”:1,
“子类别名称”:“lkjasdf”
}
]
},
{
“id”:2,
“类别名称”:“类别2”,
“子类别”:[
{
“id”:2,
“子类别名称”:“LKJASDASDFAF”
}
]
}
]
}
客户端(Android)


JSONArray JSONArray=新JSONArray(变量);
//然后我收到了这样的信息:JSONArray中的JSONArray()不能应用于com.package.Model。我也尝试了不同的方法来解决这个问题:
字符串json=“”;
Gson Gson=new GsonBuilder().create();
类型showType=newTypeToken(){}.getType();
ArrayList approach=gson.fromJson(json,showType);
String catName=String.valueOf(接近.get(0.getCategoryName());
//但当我尝试接收有关catName的信息时,出现了0。
Log.d(“猫名”、“猫名”+猫名);
接近类 }

MainActivity.class Android 方法,在该方法中,我连接到localhost以检索信息
private void fetchhhdata(){
compositeDisposable.add(iMyAPI.getAll()
.subscribeOn(Schedulers.io())
.subscribeOn(AndroidSchedulers.mainThread())
.订阅(新消费者){
@RequiresApi(api=Build.VERSION\u CODES.KITKAT)
@凌驾
public void accept(方法)引发异常{
showData(Collections.singletonList(方法));
}
}));
}
MainActivity.class Android showData()
private void showData(列表方法){
JSONArray JSONArray=新的JSONArray(方法);

对于(int i=1;i,这里有一个工作示例。如果您再引入一个class
CategoriesResponse
(见下文),则会简单得多

然后确保传递给
gson.fromJson(json,CategoriesResponse.class);
json
参数是从端点检索到的实际json字符串或
Reader
JsonObject


    @Test
    public void test() {
        String json = "{\n" + "  \"List\":[\n" + "    {\n" + "      \"id\":1,\n" + "      \"categoryName"
                + "\":\"Categories1\",\n"
                + "      \"subCategories\":[\n" + "        {\n" + "          \"id\":1,\n"
                + "          \"subCategoriesName\":\"lkjasdf\"\n" + "        }\n" + "      ]\n" + "    },\n" + "    {\n"
                + "      \"id\":2,\n" + "      \"categoryName\":\"Categories2\",\n" + "      \"subCategories\":[\n"
                + "        {\n" + "          \"id\":2,\n" + "          \"subCategoriesName\":\"lkjasdasdfasf\"\n"
                + "        }\n" + "      ]\n" + "    }\n" + "  ]\n" + "}";

        Gson gson = new Gson();
        CategoriesResponse gsonResponse = gson.fromJson(json, CategoriesResponse.class);

        assertEquals(2, gsonResponse.categories.size());

    }

    public class Approach {

        @SerializedName("categoryName") @Expose private String categoryName;
        @SerializedName("subCategories") @Expose private List<SubCategories> subCategories;

        public Approach(String categoryName, List<SubCategories> subCategories) {
            this.categoryName = categoryName;
            this.subCategories = subCategories;
        }
    }

    public class SubCategories {

        @SerializedName("id") @Expose private int id;
        @SerializedName("subCategoriesName") @Expose private String subCategoriesName;
    }

    public class CategoriesResponse {

        @SerializedName("List") @Expose private List<Approach> categories;
    }


@试验
公开无效测试(){
字符串json=“{\n”+“\”列表\:[\n”+“{\n”+“\”id\”:1、\n“+”\“categoryName”
+“\”:\“类别1\”,\n”
+“\“子类别\:[\n”+“{\n”+“\“id\”:1,\n”
+“\”子类别名称\\:\”lkjasdf\“\n”+“}\n”+“]\n”+“}\n”+“{\n”
+“\“id\”:2、\n“+”\“categoryName\:\“Categories2\”、\n“+”\“subCategories\”:[\n”
+{\n“+”\“id\”:2、\n“+”\“子类别名称”:“LKJASDAFSF\”\n
+“}\n”+“]\n”+“}\n”+“]\n”+“}”;
Gson Gson=新的Gson();
CategoriesResponse gsonResponse=gson.fromJson(json,CategoriesResponse.class);
assertEquals(2,gsonResponse.categories.size());
}
公共课教学法{
@SerializedName(“categoryName”)@公开私有字符串categoryName;
@SerializedName(“子类别”)@公开私有列表子类别;
公共方法(字符串类别名称、列表子类别){
this.categoryName=categoryName;
this.subCategories=子类别;
}
}
公共类子类别{
@SerializedName(“id”)@Expose private int id;
@SerializedName(“子类别名称”)@公开私有字符串子类别名称;
}
公共类类别响应{
@SerializedName(“List”)@公开私有列表类别;
}

提供方法类Rajnish suryavanshi感谢您的回答,刚刚添加了方法类和子类以添加一个调试器来检查变量的值,由变量形成的json数组请添加
变量
声明和初始化我添加了两个方法:fetchhhdata()和showData()。在fetchhhdata()中,我尝试检索信息,并将变量“approach”发送到showData()。在showData()中,我尝试从中检索信息。但它不起作用。控制台中没有显示任何信息。
public class SubCategories {


@SerializedName("id")
@Expose
private int id;

@SerializedName("subCategoriesName")
@Expose
private String subCategoriesName;

public int getId() {
    return id;
}

public void setId(int id) {
    this.id = id;
}

public String getSubCategoriesName() {
    return subCategoriesName;
}

public void setSubCategoriesName(String subCategoriesName) {
    this.subCategoriesName = subCategoriesName;
}
private void fetchhhhData() {

    compositeDisposable.add(iMyAPI.getAll()
    .subscribeOn(Schedulers.io())
    .subscribeOn(AndroidSchedulers.mainThread())
    .subscribe(new Consumer<Approach>() {
        @RequiresApi(api = Build.VERSION_CODES.KITKAT)
        @Override
        public void accept(Approach approach) throws Exception {


            showData(Collections.singletonList(approach));

        }
    }));

}
  private void showData(List<Approach> approaches) {

    JSONArray jsonArray = new JSONArray(approaches);



    for (int i=1; i<= jsonArray.length() - 1; i++) {

        try {
            JSONObject jsonObject = jsonArray.getJSONObject(i);

            String categ = jsonObject.get("List").toString();

             Log.d("categ","categ" + categ);

         //   String catName = String.valueOf(jsonObject.get("List"));


     //       String catName = jsonObject.getString("categoryName");

      //      Log.d("catName","catName" + catName);


        } catch (JSONException e) {
            e.printStackTrace();
        }

    }



}

    @Test
    public void test() {
        String json = "{\n" + "  \"List\":[\n" + "    {\n" + "      \"id\":1,\n" + "      \"categoryName"
                + "\":\"Categories1\",\n"
                + "      \"subCategories\":[\n" + "        {\n" + "          \"id\":1,\n"
                + "          \"subCategoriesName\":\"lkjasdf\"\n" + "        }\n" + "      ]\n" + "    },\n" + "    {\n"
                + "      \"id\":2,\n" + "      \"categoryName\":\"Categories2\",\n" + "      \"subCategories\":[\n"
                + "        {\n" + "          \"id\":2,\n" + "          \"subCategoriesName\":\"lkjasdasdfasf\"\n"
                + "        }\n" + "      ]\n" + "    }\n" + "  ]\n" + "}";

        Gson gson = new Gson();
        CategoriesResponse gsonResponse = gson.fromJson(json, CategoriesResponse.class);

        assertEquals(2, gsonResponse.categories.size());

    }

    public class Approach {

        @SerializedName("categoryName") @Expose private String categoryName;
        @SerializedName("subCategories") @Expose private List<SubCategories> subCategories;

        public Approach(String categoryName, List<SubCategories> subCategories) {
            this.categoryName = categoryName;
            this.subCategories = subCategories;
        }
    }

    public class SubCategories {

        @SerializedName("id") @Expose private int id;
        @SerializedName("subCategoriesName") @Expose private String subCategoriesName;
    }

    public class CategoriesResponse {

        @SerializedName("List") @Expose private List<Approach> categories;
    }