android - ArrayIndexOutOfBoundsException 异常

标签 android

我有这个字符串

227305593149516.jpg;221563849532915.3gp;

我用 ; 分割每个文件名正如您所看到的那样。我在我的 Activity 中使用这段代码将它们分开:

mystring="227305593149516.jpg;221563849532915.3gp;";
StringTokenizer tokenizer = new StringTokenizer(mystring, ";");
                while (tokenizer.hasMoreTokens()) {
                    String token = tokenizer.nextToken();
                    if(!token.contains(".3gp")){//aks bud
                        imges[cimage]=token;
                        cimage++;
                    }else{//film bud
                        if(cvide==1)
                            video1=token;
                        else
                            video2=token;
                        cvide++;
                    }
                }

这很奇怪,我在模拟器和其他 2 台设备上运行这段代码,它可以找到,但我在另一部手机上运行相同的应用程序,它崩溃了,这是日志:

java.lang.ArrayIndexOutOfBoundsException: length=1; index=1
at com.arousshow.persiandesigners.AddDetails$GetContacts.onPostExecute(AddDetails.java:160)
at com.arousshow.persiandesigners.AddDetails$GetContacts.onPostExecute(AddDetails.java:1)
at android.os.AsyncTask.finish(AsyncTask.java:631)
at android.os.AsyncTask.access$600(AsyncTask.java:177)
at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:644)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4898)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1006)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:773)
at dalvik.system.NativeStart.main(Native Method)

这是导致应用程序崩溃的行 (AddDetails.java:160) :

if(!token.contains(".3gp")){

手机型号为 PHONE_MODEL = GT-I9300 和 ANDROID_VERSION = 4.1.2 。

你能帮帮我吗? 谢谢

最佳答案

我目前没有设置 android SDK,但在 Java 8 中,这对我有用:

public static void main(String[] args) {
    String mystring = "227305593149516.jpg;221563849532915.3gp;";
    StringTokenizer tokenizer = new StringTokenizer(mystring, ";");
    while (tokenizer.hasMoreTokens()) {
        String token = tokenizer.nextToken();
        if (!token.contains(".3gp")) {
            System.out.println(token + " has 3gp");
        } else {
            System.out.println(token + " does not have 3gp");
        }
    }
}

"227305593149516.jpg has 3gp"
"221563849532915.3gp does not have 3gp"

我怀疑 Android 可能会在最后一个“;”之后添加一个额外的标记,它由一个空字符串组成。像这样添加空字符串检查是否可以解决 indexArray 问题?

if (!token.isEmpty() && !token.contains(".3gp")) {

根据 android 文档,无论如何您都应该使用 split。 StringTokenizer :“将字符串分解为标记;新代码可能应该使用 split(String)。”

另一方面,您可以更正确地检查 token “endsWith”是否是您关心的后缀。 String::EndsWith

关于android - ArrayIndexOutOfBoundsException 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28565572/

相关文章:

android - android中的Uri.parse是什么

android - 管理 Google map API key

java - 如果 Android Activity 位于前台,则向其传递通知 Intent 并启动它的适当方法是什么?

java - 在媒体播放器中加载多个音乐媒体

Android WebView显示全高清html

android - 如何在另一个 View 下添加动态按钮?

java - 从压缩文本文件中获取文本行的阅读器

android - 操作系统版本 >= 2.2 的 Android 模拟器中的日历

android - 使用 RxJava for Android 重试 observable 直到满足某些条件

安卓 : Get notification when user enter in specific location