我正在使用此方法检索一些图像。
唯一的问题是
aURL = new URL(myRemoteImages[position]);
位置是我不知道如何获取每个图像的位置,以便在我的代码中设置标记。
i.setTag(mImageURLs[position]);
正如您所见,myRemoteimages有7个字符串,就是全部。我怎么能硬编码。 int职位只有7个职位?
public void RetrieveImages() {
ImageView i = new ImageView(this);
String[] mImageURLs = {
urlImage1, urlImage2, urlImage3, urlImage4, urlImage5, urlImage6,
urlImage7};
String[] myRemoteImages = {
imageUrl, imageUrl2, imageUrl3, imageUrl4,
imageUrl5, imageUrl6, imageUrl7};
URL aURL = null;
try {
aURL = new URL(myRemoteImages[position]);
} catch (MalformedURLException e2) {
// TODO Auto-generated catch block
e2.printStackTrace();
}
Log.v("ImageLoader", "Remote images set");
i.setTag(mImageURLs[position]);
URI imageUri = null;
SharedPreferences myPrefs = getSharedPreferences("imageUri", 0);
SharedPreferences.Editor myPrefsEdit = myPrefs.edit();
// Setting the Uri of aURL to imageUri.
try {
imageUri = aURL.toURI();
myPrefsEdit.putString("uris", imageUri.toString());
myPrefsEdit.commit();
} catch (URISyntaxException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
答案 0 :(得分:2)
这个问题有点含糊不清,在我看来有几个答案,取决于OP实际上在寻找什么。在这段代码中还有一些奇怪的事情......
mImageURLs
和myRemoteImages
都包含概念上相同的字符串名称。这很令人困惑,并且会导致维护问题。另外,因为使用的字符串看起来是实例变量,所以您应该将数组作为实例变量,这样可以省去声明14个(最终更多)字符串变量的麻烦(以及相关的维护)处理它们的麻烦)。声明imageUrl
,imageUrl2
,... imageUrl7
等变量名称通常表明问题正在被解决 - 至少,如果有不同的字符串不同的事物,它们应该被命名为(backImage
,forwardImage
等)。除了urlImage
和imageUrl1
'出现'缺失的问题(由于命名方案的不同)。e
- 它是标准的,你已经将它们无序化了,并且它们不能在catch块之外访问它们。如果您知道数组中的特定索引总是包含所需的URI(并且您只使用其中一个),那么您可以继续硬编码。最好使用常量,然后在必要时引用其他地方:
i.setTag(mImageURLs[HOME_PAGE_IMAGE_ARRAY_INDEX]);
当然,在那时(特别是如果你在本地声明数组......),你也可以使用实际的字符串:
i.setTag(urlImage3);
这也为您节省了处理数组的成本。
如果您需要浏览阵列中的所有图像...
在Java中循环数组有两种方法:foreach
循环(我不确定android是否支持)和标准for
循环:
for(int i = 0; i < mImageURLs.length(); i++) {
i.setTag(mImageURLs[i]);
}
这有一个额外的好处,如果你总是希望在数组中显示 all 字符串,这个'自动'扩展来处理它。异常处理是属于数组内部还是外部取决于设计,但我怀疑它可能属于这里......