因此,我正在尝试找出将多种数据类型组合在一起的最佳方法。在我的代码内部,我正在创建一个类。在外部,我希望有一个地方可以管理以下类型的数据,或者至少指向所述数据的指针。请注意,这些数据有很多组,我预计随着时间的推移会增加更多。
编辑:我正在大规模简化曾经的事情。
在编译时成像,我有一个对象列表。每个对象都有一些特征,所有对象都有共同之处。其中包括:
我想找到一种方法将所有这些存储在任何代码之外。理想情况下,我想使用XML,模糊地看起来像这样:
<storage_type>
<image resid="@id/image1" />
<name>Item_Name1</name>
</storage_type>
<storage_type>
<image resid="@id/image2" />
<name>Item_Name2</name>
</storage_type>
图像当前存储为资源变量。我只是不确定如何将图像引用放入XML文件中。
如果可以找到更好的解决方案,我与XML文件的想法没有结合。我想要的只是一个访问这些信息的单一数据库。
除非我提交新的更新,否则不应更改此数据。这些不需要在运行时更新,但我肯定希望在构建之间不时更新它们。我听说过可能有用的偏好设置,但我不确定它们是否可能以某种方式用户可更新
答案 0 :(得分:2)
我能够在this question的帮助下找到解决方案。
我的数据存储文件如下:
<storage_type>
<image imageArrayIndex="1" />
<name>Item_Name1</name>
</storage_type>
<storage_type>
<image imageArrayIndex="2" />
<name>Item_Name2</name>
</storage_type>
我的res / values文件夹中有一个文件,如下所示:
<resources>
<string-array name="images">
<item>@drawable/default</item>
<item>@drawable/image1</item>
<item>@drawable/image2</item>
</string-array>
</resources>
在深入解析XML代码的地方我有:
TypedArray imgs = context.getResources().obtainTypedArray(R.array.achievement_images);
//Whole bunch of code to parse XML, eventually coming to this line:
else if (name.equals("image"))
{
imageRes=imgs.getResourceId(xpp.getAttributeIntValue(null,"imageArrayIndex", 0),-1);
}
或者,我可以简单地存储图像的名称,如下所示:
<storage_type>
<image resid="image1" />
<name>Item_Name1</name>
</storage_type>
<storage_type>
<image resid="image2" />
<name>Item_Name2</name>
</storage_type>
然后通过解析XML标记并通过以下方式获取资源ID来获取它:
int resid=Context.getResources().getIdentifier (name_string_Image, "drawable", null);
答案 1 :(得分:1)
SharedPreferences是一个选项,但是在这种情况下,即使您只需要更改值,您也必须在代码中进行更改。另一方面,xml方式更灵活。
将来,如果您只想更改设置的值,请更改xml文件并将其推送到用户的手机。无需更改代码,完成测试周期等。如果您想添加/删除内容,则无论哪种方式都需要更改代码(特别是添加部分)
xml ofcourse的开销,将是读者/作者部分。
答案 2 :(得分:1)
我认为您可以创建一个存储这些值的自定义对象,并有一个方法将其输出到JSON字符串(用于存储在Prefs中)并通过接收JSON字符串进行重构。您还可以使用返回对象图像的方法。这是我写的一个示例类:
public class MyObject {
private static final String IMAGE_RES_ID = "ImageResId";
private static final String STRING1 = "String1";
private static final String STRING2 = "String2";
private static final String INT_ARRAY = "IntArray";
private static final String STRING_ARRAY = "StringArray";
private int mImageResId;
private String mString1, mString2;
private int[] mIntArray;
private String[] mStringArray;
public MyObject(int imageResId, String s1, String s2, int[] intArray,
String[] stringArray) {
mImageResId = imageResId;
mString1 = s1;
mString2 = s2;
mIntArray = intArray;
mStringArray = stringArray;
}
public MyObject(String jsonString) throws JSONException {
JSONObject jsonObject = new JSONObject(jsonString);
// Get single values
mImageResId = jsonObject.getInt(IMAGE_RES_ID);
mString1 = jsonObject.getString(STRING1);
mString2 = jsonObject.getString(STRING2);
// Get arrays
JSONArray intArray = jsonObject.getJSONArray(INT_ARRAY);
mIntArray = new int[intArray.length()];
for (int i = 0; i < mIntArray.length; i++)
mIntArray[i] = intArray.getInt(i);
JSONArray stringArray = jsonObject.getJSONArray(STRING_ARRAY);
mStringArray = new String[stringArray.length()];
for (int i = 0; i < mStringArray.length; i++)
mStringArray[i] = stringArray.getString(i);
}
public int getImageResId() {
return mImageResId;
}
public String getString1() {
return mString1;
}
public String getString2() {
return mString2;
}
public int[] getIntArray() {
return mIntArray;
}
public String[] getStringArray() {
return mStringArray;
}
public Drawable getImageDrawable(Context context) {
return context.getResources().getDrawable(getImageResId());
}
private JSONObject toJsonObject() throws JSONException{
JSONObject toReturn = new JSONObject();
// Put single values
toReturn.put(IMAGE_RES_ID, getImageResId());
toReturn.put(STRING1, getString1());
toReturn.put(STRING2, getString2());
// Put arrays
JSONArray intArray = new JSONArray();
for (int value : mIntArray)
intArray.put(value);
JSONArray stringArray = new JSONArray();
for (String value : mStringArray)
stringArray.put(value);
toReturn.put(INT_ARRAY, intArray);
toReturn.put(STRING_ARRAY, stringArray);
return toReturn;
}
public String toJsonString() throws JSONException {
return toJsonObject().toString();
}
}
一旦掌握了要保存的所有相关信息,请构建此信息。然后将toJsonString()的结果存储在SharedPreferences中,并在需要时在运行时恢复。