android - ArrayIndexOutOfBoundsException

时间:2015-02-17 15:57:35

标签: android

我有这个字符串

227305593149516.jpg;221563849532915.3gp;

我将每个文件名拆分为;你可以看到charecter。我在我的活动中使用这个代码使它们分开:

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。

你可以帮帮我吗? 谢谢

1 个答案:

答案 0 :(得分:1)

我目前没有安装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)。”

另一方面,您可以更正确地检查令牌'endsWith'是否与您关注的后缀。 String::EndsWith