Android 数组列表丢失了特定对象的值
我创建了一个模型类。它有自己类的数组列表。因为我需要获取无限json对象,但当我在列表中存储该数组时,在获取该特定对象后,它的值显示错误。如何管理这种类型的数组列表 下面是我的模型类示例:Android 数组列表丢失了特定对象的值,android,arrays,json,Android,Arrays,Json,我创建了一个模型类。它有自己类的数组列表。因为我需要获取无限json对象,但当我在列表中存储该数组时,在获取该特定对象后,它的值显示错误。如何管理这种类型的数组列表 下面是我的模型类示例: public class Search { String Value1="",Value2=""; ArrayList<Search> searchArrayList; } 以下是我如何从API中获取值: for (int i = 0; i < jsonDataArray
public class Search {
String Value1="",Value2="";
ArrayList<Search> searchArrayList;
}
以下是我如何从API中获取值:
for (int i = 0; i < jsonDataArray.length(); i++) {
JSONObject jsonObjSearch = jsonDataArray.getJSONObject(i);
SearchTemp searchTemp = new SearchTemp();
searchTemp.setQDetailId(jsonObjSearch.getString("QDetailId"));
searchTemp.setQuestionId(jsonObjSearch.getString("QuestionId"));
searchTemp.setLabelName(jsonObjSearch.getString("LabelName"));
searchTemp.setSequenceNo(jsonObjSearch.getString("SequenceNo"));
searchTemp.setQueAnswer(jsonObjSearch.getString("QueAnswer"));
searchTemp.setQType(jsonObjSearch.getString("QType"));
searchTemp.setScreenName(jsonObjSearch.getString("ScreenName"));
if (jsonObjSearch.has("items")) {
searchTemp.setSearchTempArrayList(getChildValues(jsonObjSearch));
}
searchFilterArrayList.add(searchTemp);
}
ArrayList<SearchTemp> getChildValues(JSONObject jsonObjSearch) {
ArrayList<SearchTemp> arrayOptions = new ArrayList<SearchTemp>();
try {
JSONArray jsonItemArray = jsonObjSearch.getJSONArray("items");
if (jsonItemArray.length() > 0) {
for (int j = 0; j < jsonItemArray.length(); j++) {
JSONObject jsonItems = jsonItemArray.getJSONObject(j);
SearchTemp searchChild = new SearchTemp();
searchChild.setQDetailId(jsonItems.getString("QDetailId"));
searchChild.setQuestionId(jsonItems.getString("QuestionId"));
if (jsonItems.has("LabelName")) {
searchChild.setLabelName(jsonItems.getString("LabelName"));
}
searchChild.setSequenceNo(jsonItems.getString("SequenceNo"));
searchChild.setQueAnswer(jsonItems.getString("QueAnswer"));
searchChild.setQType(jsonItems.getString("QType"));
searchChild.setScreenName(jsonItems.getString("ScreenName"));
if (jsonItems.has("items")) {
searchChild.setSearchTempArrayList(getChildValues(jsonItems));
}
Utility.printLog("Child->" + j, searchChild.getLabelName() + "->" + searchChild.getQueAnswer());
arrayOptions.add(searchChild);
}
Utility.printLog("tag->arrayOptions->", String.valueOf(arrayOptions.size()));
}
Utility.printLog("tag->", "-----------------------------");
} catch (JSONException e) {
e.printStackTrace();
}
return arrayOptions;
}
for(int i=0;i0){
对于(int j=0;j”+j,searchChild.getLabelName()+“->”+searchChild.getQueAnswer());
arrayOptions.add(searchChild);
}
printLog(“tag->arrayOptions->”,String.valueOf(arrayOptions.size());
}
printLog(“标记->”,“-------------------------------”;
}捕获(JSONException e){
e、 printStackTrace();
}
返回阵列选项;
}
这是我的模型类:SearchTemp.java
public class SearchTemp {
String QDetailId="",QuestionId="",LabelName="",SequenceNo="",QueAnswer="",QType="",ScreenName="";
ArrayList<SearchTemp> searchTempArrayList=new ArrayList<>();
boolean isSelected=false;
public boolean isSelected() {
return isSelected;
}
public void setSelected(boolean selected) {
isSelected = selected;
}
public String getQDetailId() {
return QDetailId;
}
public void setQDetailId(String QDetailId) {
this.QDetailId = QDetailId;
}
public String getQuestionId() {
return QuestionId;
}
public void setQuestionId(String questionId) {
QuestionId = questionId;
}
public String getLabelName() {
return LabelName;
}
public void setLabelName(String labelName) {
LabelName = labelName;
}
public String getSequenceNo() {
return SequenceNo;
}
public void setSequenceNo(String sequenceNo) {
SequenceNo = sequenceNo;
}
public String getQueAnswer() {
return QueAnswer;
}
public void setQueAnswer(String queAnswer) {
QueAnswer = queAnswer;
}
public String getQType() {
return QType;
}
public void setQType(String QType) {
this.QType = QType;
}
public String getScreenName() {
return ScreenName;
}
public void setScreenName(String screenName) {
ScreenName = screenName;
}
public ArrayList<SearchTemp> getSearchTempArrayList() {
Utility.printLog("getSearchTempArrayList",String.valueOf(searchTempArrayList.size()));
return searchTempArrayList;
}
public void setSearchTempArrayList(ArrayList<SearchTemp> searchTempArrayList) {
this.searchTempArrayList = searchTempArrayList;
Utility.printLog("setSearchTempArrayList",String.valueOf(searchTempArrayList.size()));
}
公共类SearchTemp{
字符串QDetailId=“”、QuestionId=“”、LabelName=“”、SequenceNo=“”、QueAnswer=“”、QType=“”、ScreenName=“”;
ArrayList searchTempArrayList=新建ArrayList();
布尔值=假;
公选{
选举产生的回报;
}
已选择公共无效设置(已选择布尔值){
isSelected=已选择;
}
公共字符串getQDetailId(){
返回QDetailId;
}
公共void setQDetailId(字符串QDetailId){
this.QDetailId=QDetailId;
}
公共字符串getQuestionId(){
返回问题ID;
}
公共void setQuestionId(字符串questionId){
QuestionId=QuestionId;
}
公共字符串getLabelName(){
返回标签名;
}
public void setLabelName(字符串labelName){
LabelName=LabelName;
}
公共字符串getSequenceNo(){
返回序列号;
}
公共无效设置序列号(字符串序列号){
SequenceNo=SequenceNo;
}
公共字符串getQueAnswer(){
回答问题;
}
public void setQueAnswer(字符串queAnswer){
QueAnswer=QueAnswer;
}
公共字符串getQType(){
返回QType;
}
公共void setQType(字符串QType){
this.QType=QType;
}
公共字符串getScreenName(){
返回屏幕名称;
}
公共无效设置屏幕名称(字符串屏幕名称){
屏幕名称=屏幕名称;
}
公共ArrayList getSearchTempArrayList(){
printLog(“getSearchTempArrayList”,String.valueOf(searchTempArrayList.size());
返回searchTempArrayList;
}
public void setSearchTempArrayList(ArrayList searchTempArrayList){
this.searchTempArrayList=searchTempArrayList;
printLog(“setSearchTempArrayList”,String.valueOf(searchTempArrayList.size());
}
}使用helper函数,以便随时递归调用
function populateSearchTemp(SearchTemp searchTemp, JSONArray jsonDataArray)
for (int i = 0; i < jsonDataArray.length(); i++) {
JSONObject jsonObjSearch = jsonDataArray.getJSONObject(i);
searchTemp.setQDetailId(jsonObjSearch.getString("QDetailId"));
searchTemp.setQuestionId(jsonObjSearch.getString("QuestionId"));
searchTemp.setLabelName(jsonObjSearch.getString("LabelName"));
searchTemp.setSequenceNo(jsonObjSearch.getString("SequenceNo"));
searchTemp.setQueAnswer(jsonObjSearch.getString("QueAnswer"));
searchTemp.setQType(jsonObjSearch.getString("QType"));
searchTemp.setScreenName(jsonObjSearch.getString("ScreenName"));
if (jsonObjSearch.has("items"))
populateSearchTemp(searchTemp.getSearchTempArrayList(),
jsonObjSearch.getArray("items"));
}
}
使用GSON,更改了模型类别
SearchTemp
:
public class SearchTemp {
@SerializedName("QDetailId")
String QDetailId;
@SerializedName("QuestionId")
String QuestionId;
@SerializedName("LabelName")
String LabelName;
@SerializedName("SequenceNo")
String SequenceNo;
@SerializedName("QueAnswer")
String QueAnswer;
@SerializedName("QType")
String QType;
@SerializedName("ScreenName")
String ScreenName;
@SerializedName("items")
List<SearchTemp> items = new ArrayList<SearchTemp>();
//getters and setters
}
ArrayList<SearchTemp> searchTempList = new ArrayList<SearchTemp>();
Gson gson = new Gson();
JsonParser parser = new JsonParser();
JsonArray jArray = parser.parse(arg0.toString()).getAsJsonArray();
for(JsonElement obj : jArray )
{
SearchTemp searchTemp = gson.fromJson( obj , SearchTemp .class);
searchTempList.add(searchTemp);
}
在你的主课上
public static ArrayList<SearchTemp> getSearchTempTreeBreakDown(JSONArray arg0) throws JSONException {
ArrayList<SearchTemp> searchTempList = new ArrayList<SearchTemp>();
for(int i = 0; i < arg0.length(); i++){
JSONObject jsonCategoryObject = arg0.getJSONObject(i);
SearchTemp searchTemp = new SearchTemp();
String qDetailId = jsonCategoryObject.getString("QDetailId");
String questionId = jsonCategoryObject.getString("QuestionId");
String labelName = jsonCategoryObject.getString("LabelName");
String sequenceNo = jsonCategoryObject.getString("SequenceNo");
String queAnswer = jsonCategoryObject.getString("QueAnswer");
String qType = jsonCategoryObject.getString("QType");
String screenName = jsonCategoryObject.getString("ScreenName");
searchTemp.setQDetailId(qDetailId);
searchTemp.setQuestionId(questionId);
searchTemp.setLabelName(labelName);
searchTemp.setSequenceNo(sequenceNo);
searchTemp.setQueAnswer(queAnswer);
searchTemp.setQType(qType);
searchTemp.setQType(screenName);
//this part should happen over and over again if there is a category[]
JSONArray categoryArray = new JSONArray(jsonCategoryObject.getString("items"));
for (int x = 0; x < categoryArray.length(); x++){
JSONObject jsonProductObject1 = categoryArray.getJSONObject(x);
// Category is model with the getters and setters method.Please see below class
Category category = new Category();
category.setQDetailId(jsonProductObject1.getString("QDetailId"));
category.setQuestionId(jsonProductObject1.getString("QuestionId"));
category.setLabelName(jsonProductObject1.getString("LabelName"));
category.setSequenceNo(jsonProductObject1.getString("SequenceNo"));
category.setQueAnswer(jsonProductObject1.getString("QueAnswer"));
category.setQType(jsonProductObject1.getString("QType"));
category.setScreenName(jsonProductObject1.getString("ScreenName"));
searchTemp.getItems().add(category);
}
searchTempList.add(searchTemp);
}
return searchTempList;
}
publicstaticarraylistgetsearchtreebreakdown(JSONArray arg0)抛出JSONException{
ArrayList searchTempList=新建ArrayList();
对于(int i=0;i public class SearchTemp {
@SerializedName("QDetailId")
String QDetailId;
@SerializedName("QuestionId")
String QuestionId;
@SerializedName("LabelName")
String LabelName;
@SerializedName("SequenceNo")
String SequenceNo;
@SerializedName("QueAnswer")
String QueAnswer;
@SerializedName("QType")
String QType;
@SerializedName("ScreenName")
String ScreenName;
@SerializedName("items")
List<SearchTemp> items = new ArrayList<SearchTemp>();
//getters and setters
}
ArrayList<SearchTemp> searchTempList = new ArrayList<SearchTemp>();
Gson gson = new Gson();
JsonParser parser = new JsonParser();
JsonArray jArray = parser.parse(arg0.toString()).getAsJsonArray();
for(JsonElement obj : jArray )
{
SearchTemp searchTemp = gson.fromJson( obj , SearchTemp .class);
searchTempList.add(searchTemp);
}
public class Category {
String QDetailId;
String QuestionId;
String LabelName;
String SequenceNo;
String QueAnswer;
String QType;
String ScreenName;
//getters and setters
}
public static ArrayList<SearchTemp> getSearchTempTreeBreakDown(JSONArray arg0) throws JSONException {
ArrayList<SearchTemp> searchTempList = new ArrayList<SearchTemp>();
for(int i = 0; i < arg0.length(); i++){
JSONObject jsonCategoryObject = arg0.getJSONObject(i);
SearchTemp searchTemp = new SearchTemp();
String qDetailId = jsonCategoryObject.getString("QDetailId");
String questionId = jsonCategoryObject.getString("QuestionId");
String labelName = jsonCategoryObject.getString("LabelName");
String sequenceNo = jsonCategoryObject.getString("SequenceNo");
String queAnswer = jsonCategoryObject.getString("QueAnswer");
String qType = jsonCategoryObject.getString("QType");
String screenName = jsonCategoryObject.getString("ScreenName");
searchTemp.setQDetailId(qDetailId);
searchTemp.setQuestionId(questionId);
searchTemp.setLabelName(labelName);
searchTemp.setSequenceNo(sequenceNo);
searchTemp.setQueAnswer(queAnswer);
searchTemp.setQType(qType);
searchTemp.setQType(screenName);
//this part should happen over and over again if there is a category[]
JSONArray categoryArray = new JSONArray(jsonCategoryObject.getString("items"));
for (int x = 0; x < categoryArray.length(); x++){
JSONObject jsonProductObject1 = categoryArray.getJSONObject(x);
// Category is model with the getters and setters method.Please see below class
Category category = new Category();
category.setQDetailId(jsonProductObject1.getString("QDetailId"));
category.setQuestionId(jsonProductObject1.getString("QuestionId"));
category.setLabelName(jsonProductObject1.getString("LabelName"));
category.setSequenceNo(jsonProductObject1.getString("SequenceNo"));
category.setQueAnswer(jsonProductObject1.getString("QueAnswer"));
category.setQType(jsonProductObject1.getString("QType"));
category.setScreenName(jsonProductObject1.getString("ScreenName"));
searchTemp.getItems().add(category);
}
searchTempList.add(searchTemp);
}
return searchTempList;
}