Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/204.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 Hashmap不断返回空值_Java_Android_Hashmap - Fatal编程技术网

Java Hashmap不断返回空值

Java Hashmap不断返回空值,java,android,hashmap,Java,Android,Hashmap,我正在尝试在firebase android平台上存储和删除数据。每个对象(如衬衫)存储用户写入的标签。因此,我使用一个hashmap,它将帮助我将每个标记名映射到tagHolder对象。这是我的部分代码 final String name = editTextName.getText().toString().trim(); final String color = editTextColor.getText().toString().trim(); final String category

我正在尝试在firebase android平台上存储和删除数据。每个对象(如衬衫)存储用户写入的标签。因此,我使用一个hashmap,它将帮助我将每个标记名映射到tagHolder对象。这是我的部分代码

final String name = editTextName.getText().toString().trim();
final String color = editTextColor.getText().toString().trim();
final String category = editTextCategory.getText().toString().trim();
final String tags = editTextTags.getText().toString().trim();
final DatabaseReference databaseRef = mDatabaseRef.child("/" + category);


mUploadTask = fileReference.putFile(imageUri).
                addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
                    @Override
                    public void onSuccess(final UploadTask.TaskSnapshot taskSnapshot) {
                        fileReference.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
                            @Override
                            public void onSuccess(Uri uri) {
                                // handles the retrieval of tags when user enters each tag seperated by
                                // commas.
                                Shirt shirt = new Shirt(name, color, uri.toString());
                                List<String> stringTag = Arrays.asList(tags.split(","));
                                shirt.setTags(stringTag);

                                // for each tag in the list, upload it onto firebase database.
                                for (String shirtTag : stringTag) {

                                    // Handles the uploading of tags onto firebase for search
                                    // to be conducted.
                                    DatabaseReference dataRef = mDatabaseTagRef.child(shirtTag);
                                    String uniqueId = dataRef.push().getKey();
                                    TagHolder tagHolder = new TagHolder(name,uri.toString());
                                    shirt.putTag(shirtTag,tagHolder); // i put the tag here in the hashmap 
                                    Log.i("AddActivity",shirtTag);
                                    tagHolder.setmKey(uniqueId);
                                    dataRef.child(uniqueId).setValue(tagHolder);
                                }

                                String uploadId = databaseRef.push().getKey();
                                databaseRef.child(uploadId).setValue(shirt);
                            }
                        });
和项目类别

public class Item {

private String mName;
private String mColor;
private String mImageUrl;
private List<String> tags = new ArrayList<>();
private String mKey;
private HashMap<String,TagHolder> tagHolderHashMap = new HashMap<>();

public Item(){

}



public Item(String mName, String mColor, String mImageUrl) {
    this.mName = mName;
    this.mColor = mColor;
    this.mImageUrl = mImageUrl;
}


public void setmName(String mName) {
    this.mName = mName;
}

public void setmImageUrl(String mImageUrl) {
    this.mImageUrl = mImageUrl;
}

public List<String> getTags() {
    return tags;
}

public String getmColor() {
    return mColor;
}

public String getmImageUrl() {
    return mImageUrl;
}

public void setmColor(String mColor) {
    this.mColor = mColor;
}

public String getmName() {
    return mName;
}

public void setTags(List<String> tags) {
    this.tags = tags;
}

@Exclude // dont need this in our firebase database
public String getKey() {
    return mKey;
}

@Exclude
public void setMkey(String key) {
    mKey = key;
}

public void putTag(String tag, TagHolder tagHolder) {
    tagHolderHashMap.put(tag,tagHolder);
}

public TagHolder retrieveTagHolder(String tag) {
    return tagHolderHashMap.get(tag);
    }
}

你检查地图的内容了吗?是的,日志输出显示了我输入的相同字符串。Log.i(“AddActivity”,shirtTag)和Log.i(“ShirtActivity”,tag)返回相同的值tag@Berger显然,当我试图删除衬衫时,我检查了hashmap是否不包含我插入的原始密钥。所以这有点奇怪,不确定其他代码是否会影响,但我没有在其他地方创建衬衫的任何新实例。
public class Item {

private String mName;
private String mColor;
private String mImageUrl;
private List<String> tags = new ArrayList<>();
private String mKey;
private HashMap<String,TagHolder> tagHolderHashMap = new HashMap<>();

public Item(){

}



public Item(String mName, String mColor, String mImageUrl) {
    this.mName = mName;
    this.mColor = mColor;
    this.mImageUrl = mImageUrl;
}


public void setmName(String mName) {
    this.mName = mName;
}

public void setmImageUrl(String mImageUrl) {
    this.mImageUrl = mImageUrl;
}

public List<String> getTags() {
    return tags;
}

public String getmColor() {
    return mColor;
}

public String getmImageUrl() {
    return mImageUrl;
}

public void setmColor(String mColor) {
    this.mColor = mColor;
}

public String getmName() {
    return mName;
}

public void setTags(List<String> tags) {
    this.tags = tags;
}

@Exclude // dont need this in our firebase database
public String getKey() {
    return mKey;
}

@Exclude
public void setMkey(String key) {
    mKey = key;
}

public void putTag(String tag, TagHolder tagHolder) {
    tagHolderHashMap.put(tag,tagHolder);
}

public TagHolder retrieveTagHolder(String tag) {
    return tagHolderHashMap.get(tag);
    }
}
 List<Shirt> deletables = shirtAdapter.returnDeletables();
            for (final Shirt shirt : deletables) {
                final String selectedKey = shirt.getKey();
                StorageReference shirtStorageReference = mStorageReference.child("Shirts");
                StorageReference imageRef = FirebaseStorage.getInstance()
                        .getReferenceFromUrl(shirt.getmImageUrl());
                List<String> tags = shirt.getTags();
                for (String tag : tags) {
                    // points to appa,testing123,testing456 etc
                    final DatabaseReference tagRef = mDatabaseTagRef.child("/" + tag);
                    Log.i("ShirtActivity",tag);
                    // tag holder for each shirt that has this tag
                    TagHolder tagHolder = shirt.retrieveTagHolder(tag); // tagHolder is null
                    if (tagHolder == null) {
                        Log.i("ShirtActivity","tagHolder is null");
                    }
                    tagRef.child(tagHolder.getmKey()).removeValue();
                }
                imageRef.delete().addOnSuccessListener(new OnSuccessListener<Void>() {
                    @Override
                    public void onSuccess(Void aVoid) {
                        mDatabaseReference.child(selectedKey).removeValue();
                    }
                });
mDatabaseListener = mDatabaseReference.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            mShirtList.clear();
            for (DataSnapshot postSnapShot : dataSnapshot.getChildren()) {
                Shirt shirt = postSnapShot.getValue(Shirt.class);
                shirt.setMkey(postSnapShot.getKey());
                mShirtList.add(shirt);
            }
            shirtAdapter.notifyDataSetChanged();
        }
        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });
}