Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/383.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 如何在ArrayList中强制转换嵌套HashMap_Java_Android_Casting - Fatal编程技术网

Java 如何在ArrayList中强制转换嵌套HashMap

Java 如何在ArrayList中强制转换嵌套HashMap,java,android,casting,Java,Android,Casting,有一个具有嵌套哈希映射的ArrayList。从父HashMap获取值很容易,但是当我尝试从嵌套HashMap(子HashMap)获取值时,我得到了ClassCastException。这是一个示例(类似于上一篇文章): JSON对象被表示为“映射”或“词汇表”,并不意味着您应该在Java中同样地表示它。物体就是为了这个目的而存在的 我建议您使用一个对象来解析关联的JSON并从中构造自身。例如: public class User { public User() { name = "

有一个具有嵌套哈希映射的ArrayList。从父HashMap获取值很容易,但是当我尝试从嵌套HashMap(子HashMap)获取值时,我得到了ClassCastException。这是一个示例(类似于上一篇文章):


JSON对象被表示为“映射”或“词汇表”,并不意味着您应该在Java中同样地表示它。物体就是为了这个目的而存在的

我建议您使用一个对象来解析关联的JSON并从中构造自身。例如:

public class User {

  public User() {
    name = "";
    friends = new ArrayList<User>();
  }

  /** Create a User from a JSON Object **/
  public static User createFromJson(JSONObject json) {
    User u = new User();

    // Read simple fields of the JSON object
    u.name = json.optString("name");

    // Now recursively read other users from a "friend" property
    JSONArray jsonFriends = json.optJSONArray("friends");
    for (int i=0; i<jsonFriends.length(); ++i) {
      // This is the next nested JSON Object
      JSONObject jsonFriend = jsonFriends.getJSONObject(i);

      // We convert it to a Java object
      User friend = User.createFromJson(jsonFriend);

      // And add it to our friend list
      u.friends.add(friend);
    }
  }

  private String name;
  private List<User> friends;
}
这应该起作用:

int position = 0;
Map<String, Object> parent = data.get(position);
Map<String, String> child = (Map<String, String>) parent.get("children");
int位置=0;
Map parent=data.get(位置);
Map child=(Map)parent.get(“children”);

您的代码在Java 6上运行良好。也许是安卓Dalvik的bug

无论如何,我同意您应该考虑创建自己的类(“父”、“子”等),而不是使用集合内的集合中的集合。

ArrayList<HashMap<String,Object>> data = new ArrayList<HashMap<String,Object>>();
HashMap<String, Object> parentHash = new HashMap<String, Object>();
HashMap<String, String> childHash = new HashMap<String, String>();

childHash.put("child_id", "id");
childHash.put("name", "first last");
childHash.put("sex", "man");

parentHash.put("parent_id", "id");
parentHash.put("name", "first last");
parentHash.put("sex", "woman");

parentHash.put("children", childHash);
data.add(parentHash);

Map<String, String> fetchedChildData = 
    (Map<String, String>) data.get(0).get("children");

// prints: child_id=id
System.out.println("child_id=" + fetchedChildData.get("child_id"));
ArrayList data=new ArrayList();
HashMap parentHash=新HashMap();
HashMap childHash=新HashMap();
childHash.put(“child_id”,“id”);
childHash.put(“姓名”、“首末名”);
childHash.put(“性”、“男人”);
parentHash.put(“parent_id”,“id”);
parentHash.put(“名称”、“首末”);
parentHash.put(“性”、“女人”);
parentHash.put(“children”,childHash);
data.add(parentHash);
Map fetchedChildData=
(Map)data.get(0.get(“子项”);
//打印:child_id=id
System.out.println(“child_id=“+fetchedChildData.get(“child_id”));

我认为你不需要得到(职位)。试试这个。Map fetchedChildData=(Map)parentContainer.get(“子项”);什么是parentContainer?您可以演示如何定义和填充它吗?
parentContainer
数据
相同吗?请解释一下。你应该认真考虑你以前的问题中提出的建议,因为你总是在同一个问题上遇到问题,而你之前的问题的答案也避免了你遇到的情况。对不起,我指的是数据而不是帕伦特容器。我正在获取JSON对象,并将键+值放在一个新的HashMap中,并将新的HashMap内容存储在一个类似于上述示例的ArrayList中。然后,您可能应该更正问题中的以下内容:
parentHash.get(position)
to
data.get(position)
Oops,对此表示抱歉。我指的是数据。但问题是,它仍然不起作用…谢谢你的努力,我会在家里尝试,并在它起作用时将其标记为正确。
public class User {

  public User() {
    name = "";
    friends = new ArrayList<User>();
  }

  /** Create a User from a JSON Object **/
  public static User createFromJson(JSONObject json) {
    User u = new User();

    // Read simple fields of the JSON object
    u.name = json.optString("name");

    // Now recursively read other users from a "friend" property
    JSONArray jsonFriends = json.optJSONArray("friends");
    for (int i=0; i<jsonFriends.length(); ++i) {
      // This is the next nested JSON Object
      JSONObject jsonFriend = jsonFriends.getJSONObject(i);

      // We convert it to a Java object
      User friend = User.createFromJson(jsonFriend);

      // And add it to our friend list
      u.friends.add(friend);
    }
  }

  private String name;
  private List<User> friends;
}
{ 
  "name": "Joe",
  "friends": [
    {
      "name": "Jack"
    },
    {
      "name": "Rose"
    }
  ]
}
int position = 0;
Map<String, Object> parent = data.get(position);
Map<String, String> child = (Map<String, String>) parent.get("children");
ArrayList<HashMap<String,Object>> data = new ArrayList<HashMap<String,Object>>();
HashMap<String, Object> parentHash = new HashMap<String, Object>();
HashMap<String, String> childHash = new HashMap<String, String>();

childHash.put("child_id", "id");
childHash.put("name", "first last");
childHash.put("sex", "man");

parentHash.put("parent_id", "id");
parentHash.put("name", "first last");
parentHash.put("sex", "woman");

parentHash.put("children", childHash);
data.add(parentHash);

Map<String, String> fetchedChildData = 
    (Map<String, String>) data.get(0).get("children");

// prints: child_id=id
System.out.println("child_id=" + fetchedChildData.get("child_id"));