如何硬编码7个int职位?

时间:2011-09-29 15:04:37

标签: java android

我正在使用此方法检索一些图像。

唯一的问题是

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();
    }
}

1 个答案:

答案 0 :(得分:2)

这个问题有点含糊不清,在我看来有几个答案,取决于OP实际上在寻找什么。在这段代码中还有一些奇怪的事情......

  • 您创建的两个数组mImageURLsmyRemoteImages都包含概念上相同的字符串名称。这很令人困惑,并且会导致维护问题。另外,因为使用的字符串看起来是实例变量,所以您应该将数组作为实例变量,这样可以省去声明14个(最终更多)字符串变量的麻烦(以及相关的维护)处理它们的麻烦)。声明imageUrlimageUrl2,... imageUrl7等变量名称通常表明问题正在被解决 - 至少,如果有不同的字符串不同的事物,它们应该被命名为(backImageforwardImage等)。除了urlImageimageUrl1'出现'缺失的问题(由于命名方案的不同)。
  • 您的代码打印堆栈跟踪;将代码放在设备上时可能会出现问题。您的普通消费者可能不会知道 java,并且如果将其置为错误,则不知道如何处理错误日志。您可能以某种方式记录错误,但如果您没有某种报告工具来获取日志,则可能必须禁用此功能。哦,只是命名你正在捕捉的异常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 字符串,这个'自动'扩展来处理它。异常处理是属于数组内部还是外部取决于设计,但我怀疑它可能属于这里......