Java 如何根据列表大小将数据存储到另一个ArrayList中?
我有下面的循环Java 如何根据列表大小将数据存储到另一个ArrayList中?,java,android,Java,Android,我有下面的循环 for (int i = 0; i < contacts.length(); i++) { JSONObject c = contacts.getJSONObject(i); String id = c.getString("cat_id"); String title = c.getString("cat_name"); String image = c.getString("cat_img"); mDat
for (int i = 0; i < contacts.length(); i++) {
JSONObject c = contacts.getJSONObject(i);
String id = c.getString("cat_id");
String title = c.getString("cat_name");
String image = c.getString("cat_img");
mData.add(id);
mData.add(title);
mData.add(image);
categoryHashMap.put(title, mData);
mData.clear();
}
showLog("index: "+ categoryHashMap.size());
if (jsonDataListener != null) {
// jsonDataListener.onClickData(tempList);
}
mData是ArrayList。现在,长度是7。但在完成for循环后,mData大小显示为21。这是正确的,因为显然有3个字段,即id、标题和图像。但我想要的是,我想将数据存储到另一个arraylist中,但新的arraylist大小应该是7,通过对每个索引/sie进行扩展,应该有3个字段。所以,我想是这样的:
private List<String> mData;
private List<List<String>> tempList;
但问题是大小显示为0
我还尝试了hashmap私有映射categoryHashMap=newHashMap;,第一个参数是string,第二个是list,但它不是make
输出应为:
在新arraylist中
索引0->id1
标题1
图1
索引1->id2
标题2
图2
编辑:
完整代码:
private List<String> mData;
private List<List<String>> tempList;
private Map<String, List<String>> categoryHashMap = new HashMap<>();
private void getTextFromJSON(String jsonParsingString) {
if (jsonParsingString != null) {
try {
JSONObject jsonObj = new JSONObject(jsonParsingString);
// Getting JSON Array node
JSONArray contacts = jsonObj.getJSONArray("data");
// looping through All data
mData.clear();
for (int i = 0; i < contacts.length(); i++) {
JSONObject c = contacts.getJSONObject(i);
String id = c.getString("cat_id");
String title = c.getString("cat_name");
String image = c.getString("cat_img");
mData.add(id);
mData.add(title);
mData.add(image);
/*for (int j=i; j<i+3; j++ ) {
categoryHashMap.put(title, mData);
}*/
tempList.add(mData);
}
showLog("index: "+ tempList);
if (jsonDataListener != null) {
// jsonDataListener.onClickData(tempList);
}
} catch (final JSONException e) {
Log.e(TAG, "Json parsing error: " + e.getMessage());
mActivity.runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(mContext.getApplicationContext(),
"Json parsing error: " + e.getMessage(),
Toast.LENGTH_LONG)
.show();
}
});
if (jsonDataListener != null) {
jsonDataListener.onJSONParsingError(e.getMessage());
}
}
} else {
Log.e(TAG, "Couldn't get JSON from server.");
mActivity.runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(mContext.getApplicationContext(),
"Couldn't get json from server. Check LogCat for possible errors!",
Toast.LENGTH_LONG)
.show();
}
});
if (jsonDataListener != null) {
jsonDataListener.onJSONParsingError("Couldn't get json from server. Check LogCat for possible errors!");
}
}
}
创建一个单独的类来保存3个字段。例如,将其命名为
class TempData{
private String id;
private String title;
private String image;
//getters and setters
}
然后将您的id、标题和图像分配给该类
TempData tempData = new TempData();
//set your id,title,image using setters
把你的清单列在下面
private List<TempData> mData;
因为您要单独添加字符串作为列表项
mData.add(id);
mData.add(title);
mData.add(image);
您的列表类型是stringlistmdata,它应该是这样的自定义类
List<Cat_Model> mData
使用以下代码:
private List<List<String>> tempList; // your array list
for (int i = 0; i < contacts.length(); i++) {
JSONObject c = contacts.getJSONObject(i);
String id = c.getString("cat_id");
String title = c.getString("cat_name");
String image = c.getString("cat_img");
List<String> mData = new ArrayList<>();
mData.add(id);
mData.add(title);
mData.add(image);
// Add your mData into your tempList
tempList.add(mData);
//categoryHashMap.put(title, mData);
}
更新:
从你的完整代码移动私有列表圣殿骑士;在函数中,将列表数据移动到循环中,如上图所示。尝试下面的实现
List<String> mData;
List<List<String>> tempList = new ArrayList<>();
for (int i = 0; i < contacts.length(); i++) {
mData = new ArrayList<>();
JSONObject c = contacts.getJSONObject(i);
String id = c.getString("cat_id");
String title = c.getString("cat_name");
String image = c.getString("cat_img");
mData.add(id);
mData.add(title);
mData.add(image);
tempList.add(mData);
}
现在圣堂武士的尺寸是7,每个圣堂武士有3件物品
我已经有了模型类,但问题是我想将新的arraylist传递到adapterclass参数化构造函数中,这样我就可以通过上述方法将图像和标题设置到recyclerview Adapter中。您需要清除每个循环的mData。。因此,添加mData.clear;在你的循环中,这是有效的,但现在由于这个原因,我得到了编译器错误。现在我需要将String类型转换为Category类型,这是我的模型类。我该怎么做?我不再问别的问题了,因为你已经知道我的问题了。请帮帮我。上面提到的分类模型在哪里。。请直接说明您的问题。临时列表大小为7,但当我检查每个索引时,它显示21个大小和您的屏幕截图。你肯定错过了一些循环初始化mData的内幕信息。添加此mData=newarraylist;或者用我的for循环替换你的for循环也会解决这个问题,但是我也想在for循环之外传递mData!请指定将mData传递到外部循环的原因。我找不到任何意义。你能澄清你的要求吗?@PriyankaSingh。将列表声明移到函数中。这是可行的,但现在由于这个原因,我得到了编译器错误。现在我需要将String类型转换为Category类型,这是我的模型类。我该怎么做?我不再问别的问题了,因为你已经知道我的问题了。请帮助我。@PriyankaSingh类别类型必须是一些常量的静态列表,创建一个从字符串返回类别类型的函数,您可以为您的类别类型创建枚举或其他方式。如果仍然存在问题,请在将您的列表转换为pojo类的代码部分问另一个问题。您能帮忙吗:您能帮忙吗?这是可行的,但现在由于这个原因,我得到了编译器错误。现在我需要将String类型转换为Category类型,这是我的模型类。我该怎么做?我不再问别的问题了,因为你已经知道我的问题了。请帮帮我,你能帮帮我吗?
private List<List<String>> tempList; // your array list
for (int i = 0; i < contacts.length(); i++) {
JSONObject c = contacts.getJSONObject(i);
String id = c.getString("cat_id");
String title = c.getString("cat_name");
String image = c.getString("cat_img");
List<String> mData = new ArrayList<>();
mData.add(id);
mData.add(title);
mData.add(image);
// Add your mData into your tempList
tempList.add(mData);
//categoryHashMap.put(title, mData);
}
List<String> mData;
List<List<String>> tempList = new ArrayList<>();
for (int i = 0; i < contacts.length(); i++) {
mData = new ArrayList<>();
JSONObject c = contacts.getJSONObject(i);
String id = c.getString("cat_id");
String title = c.getString("cat_name");
String image = c.getString("cat_img");
mData.add(id);
mData.add(title);
mData.add(image);
tempList.add(mData);
}