Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/335.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/192.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 共享首选项不';如果更新了可绘制文件夹,则无法正确保存可绘制资源ID_Java_Android - Fatal编程技术网

Java 共享首选项不';如果更新了可绘制文件夹,则无法正确保存可绘制资源ID

Java 共享首选项不';如果更新了可绘制文件夹,则无法正确保存可绘制资源ID,java,android,Java,Android,我有一张自定义对象卡()` 公共卡(字符串元素、字符串颜色、int-ResourceId、int-CardNumber、字符串特殊){ mResourceId是一种可绘制的卡片图像 当我将Card类型的Arraylist保存到Shared Preference,然后将单个图像添加到drawable文件夹并更新应用程序时,Arraylist的所有Card ResourceId都是混合的,无法正确显示 我确信我添加到drawable文件夹的新图像的名称与现有图像的任何名称都不匹配 public c

我有一张自定义对象卡()` 公共卡(字符串元素、字符串颜色、int-ResourceId、int-CardNumber、字符串特殊){

mResourceId是一种可绘制的卡片图像 当我将Card类型的Arraylist保存到Shared Preference,然后将单个图像添加到drawable文件夹并更新应用程序时,Arraylist的所有Card ResourceId都是混合的,无法正确显示

我确信我添加到drawable文件夹的新图像的名称与现有图像的任何名称都不匹配

public class Card implements Parcelable{
private int mResourceId, mCardNumber;
private String mColor, mElement,mSpecial,mResId;

public Card(String Element , String Color , int ResourceId , int CardNumber ){

    mResourceId = ResourceId ;
    mCardNumber = CardNumber ;
    mElement = Element ;
    mColor = Color ;
}

public Card(String Element , String Color , String ResourceId , int CardNumber ){

    mResId = ResourceId ;
    mCardNumber = CardNumber ;
    mElement = Element ;
    mColor = Color ;
}


public Card(String Element , String Color , int ResourceId , int CardNumber ,String Special){

    mResourceId = ResourceId ;
    mCardNumber = CardNumber ;
    mElement = Element ;
    mColor = Color ;
    mSpecial=Special;
}


protected Card(Parcel in) {
    mResourceId = in.readInt();
    mCardNumber = in.readInt();
    mColor = in.readString();
    mResId = in.readString();
    mElement = in.readString();
    mSpecial = in.readString();
}

public static final Creator<Card> CREATOR = new Creator<Card>() {
    @Override
    public Card createFromParcel(Parcel in) {
        return new Card(in);
    }

    @Override
    public Card[] newArray(int size) {
        return new Card[size];
    }
};


public Object getResourceId() {
    if (mResId==null){return mResourceId;}
    else {return mResId;}

}

public int getResourceId(Context context) {
    try {
        return context.getResources().getIdentifier(mResId, "drawable", context.getPackageName());
    } catch (Exception e) {
        e.printStackTrace();
        return 0;
    }
}

public void setResourceId(int ResourceId) {this.mResourceId = ResourceId;}

public void setElement(String Element) {this.mElement = Element;}

public void setCardNumber(int CardNumber) {this.mCardNumber = CardNumber;}

public int getCardNumber() {
    return mCardNumber;
}

public String getCardElement() {
    return mElement;
}

public String getCardColor() {
    return mColor;
}

public String getSpecial() {
    return mSpecial;
}

public boolean isPowerCard(){
    boolean isspecial=false;
    if (mSpecial==null){isspecial= false;}
    else {isspecial= true;}
    return isspecial;
}

@Override
public int describeContents() {
    return 0;
}

@Override
public void writeToParcel(Parcel dest, int flags) {
    dest.writeInt(mResourceId);
    dest.writeInt(mCardNumber);
    dest.writeString(mColor);
    dest.writeString(mElement);
    dest.writeString(mSpecial);
}
公共类卡实现可包裹{
private int mResourceId,mCardNumber;
私有字符串mColor、mElement、mSpecial、mResId;
公共卡(字符串元素、字符串颜色、int-ResourceId、int-CardNumber){
mResourceId=资源ID;
MCARDNAMBER=卡号;
熔化=元素;
mColor=颜色;
}
公共卡(字符串元素、字符串颜色、字符串资源ID、整数卡号){
mResId=资源id;
MCARDNAMBER=卡号;
熔化=元素;
mColor=颜色;
}
公共卡(字符串元素、字符串颜色、int-ResourceId、int-CardNumber、字符串特殊){
mResourceId=资源ID;
MCARDNAMBER=卡号;
熔化=元素;
mColor=颜色;
mSpecial=特殊;
}
受保护卡(包裹内){
mResourceId=in.readInt();
mCardNumber=in.readInt();
mColor=in.readString();
mResId=in.readString();
mElement=in.readString();
mSpecial=in.readString();
}
公共静态最终创建者=新创建者(){
@凌驾
公共卡createFromParcel(包裹中){
归还新卡(在中);
}
@凌驾
公共卡[]新阵列(整数大小){
退回新卡[尺寸];
}
};
公共对象getResourceId(){
如果(mResId==null){return mResourceId;}
else{return mResId;}
}
public int getResourceId(上下文){
试一试{
返回context.getResources().getIdentifier(mResId,“drawable”,context.getPackageName());
}捕获(例外e){
e、 printStackTrace();
返回0;
}
}
public void setResourceId(int ResourceId){this.mResourceId=ResourceId;}
public void setElement(String元素){this.mElement=Element;}
public void setCardNumber(int CardNumber){this.mCardNumber=CardNumber;}
public int getCardNumber(){
返回mCardNumber;
}
公共字符串getCardElement(){
回炉熔炼;
}
公共字符串getCardColor(){
返回mColor;
}
公共字符串getSpecial(){
返回mSpecial;
}
公共布尔值isPowerCard(){
布尔值isspecial=false;
如果(mSpecial==null){ispecial=false;}
else{isspecial=true;}
回报是特殊的;
}
@凌驾
公共int描述内容(){
返回0;
}
@凌驾
公共无效写入包裹(包裹目的地,内部标志){
目的地写入(mResourceId);
目的写入(MCARDNAMBE);
目的地书面记录(mColor);
目的书面限制(合并);
目的地书面资本(特别);
}

}

资源id是在应用程序更新时动态生成的。因此,在您的情况下,它是失败的

您可以尝试将资源的名称存储在共享首选项中,并使用该名称获取资源的id

    Resources resources = getResources();
    String resourceName = resources.getResourceEntryName(R.drawable.resource);
然后,您可以从共享首选项检索id

intresId = resources.getIdentifier(resourceName, "drawable", "your.package.name");

资源id是在应用程序更新时动态生成的。因此,在您的情况下,它是失败的

您可以尝试将资源的名称存储在共享首选项中,并使用该名称获取资源的id

    Resources resources = getResources();
    String resourceName = resources.getResourceEntryName(R.drawable.resource);
然后,您可以从共享首选项检索id

intresId = resources.getIdentifier(resourceName, "drawable", "your.package.name");

请注意
R。无论什么
资源大部分都是在运行时生成的。我不确定你在问什么,但如果你想保存像图像这样的值,你必须将它们保存为blob,或者使用高效的存储解决方案(如Firebase)@Arthuratout What is blob?代表二进制长对象。基本上,您存储整个图片本身,如JPG或PNG。如果您保存
R.drawable
值,它只是运行时引用资源的一个int。但它在上下文之外完全没有意义。请注意
R.whatever
资源大多是在运行时生成的我不知道你在问什么,但如果你想保存像图像这样的值,你必须将它们保存为blob,或者使用高效的存储解决方案(比如Firebase)@Arthuratout什么是blob?代表二进制长对象。基本上,你存储整个图片本身,比如JPG或PNG。如果你保存
R.drawable
值,它只是运行时引用资源的一个int。但是它在上下文之外完全没有意义,我确信字符串保存正确,但我需要更新de声明大约500张卡,因此这将是时间成本,我还需要在我的卡类中的方法getResourceId()处生成id,如何在非活动类中引用getResources?您需要活动上下文来调用方法getResourceId()。存储id是不可行且不可实现的,因为它们每次都是动态生成的。每次更新应用程序时,您都可以刷新共享首选项中的id。感谢它起作用,我刚刚传递了一个参数上下文,但我现在需要更改我制作的大约500张卡,我确信字符串保存正确,但我需要更新声明在大约500张卡中,这将是时间成本,我还需要在我的卡类中的方法getResourceId()处生成id,如何在非活动类中引用getResources?您需要活动上下文来调用方法getResourceId()。存储id是不可行且不可实现的,因为它们每次都是动态生成的。每次更新应用程序时,您都可以刷新共享首选项中的id。感谢它起作用,我刚刚传递了一个参数上下文,但我现在需要更改我制作的大约500张卡