0

我正在构建一个应用程序,当在活动中单击一个按钮时会弹出一个对话框,并且该对话框包含一个 MultiAutoCompleteTextview 以选择联系人姓名%number、contactname1%number、contactname2%number 形式的联系人...

所以现在我被困在一个地方,我必须通过使用逗号“,”拆分 MultiAutoCompleteTextview 并将它们一一存储在名为“arrayOfString”的字符串数组中来存储各个联系人。

接下来,我想在它们之间使用 % 拆分名称和联系人编号,并使用字符串“setnum”一一存储所有联系人号码,并且仅将没有名称的联系人号码存储在 sharedpreferences 中。

但是当我点击下面的代码保存时,应用程序正在崩溃并重新加载

初始化:

    SharedPreferences sp;
SharedPreferences.Editor ed;
String setnum="";

代码:

    .setPositiveButton(R.string.save, new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
           String[] arrayOfString=localMultiAutoCompleteTextview.getText().toString().split(",");
            int i=0;
            if(i>=arrayOfString.length){
                System.out.println("**********************" + setnum);
                Toast.makeText(getActivity(), setnum, Toast.LENGTH_SHORT).show();
                sp=getActivity().getSharedPreferences("sdat", 2);
                ed=sp.edit();
                ed.putString("snum", setnum);
                ed.commit();
                setnum="";
                getActivity().finish();
                return;
            }
           String str2="";
            if(arrayOfString[i].contains("%"))
                str2 = arrayOfString[i].split("%")[1];
            String str1;
            for (setnum=(setnum+str2+",");;setnum=(setnum+str1+",")) {
                i++;
                str1 = arrayOfString[i]; /*i am getting error here*/
            }
        }
    });

我在 str1 = arrayOfString[i]; 的最后一行收到错误

日志:

    java.lang.ArrayIndexOutOfBoundsException: length=2; index=2
        at com.sharat.emin3m.antirag.ContactDialog$1.onClick(ContactDialog.java:75)
        at com.android.internal.app.AlertController$ButtonHandler.handleMessage(AlertController.java:162)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:135)
        at android.app.ActivityThread.main(ActivityThread.java:5354)
        at java.lang.reflect.Method.invoke(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:372)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:911)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)

请帮我编写我在大学里的小项目的代码。谢谢你。

4

2 回答 2

0

使用如下增量。

for (setnum=(setnum+str2+",");i<arrayOfString.length;setnum=(setnum+str1+",")) {
    str1 = arrayOfString[i++]; /*error solved here*/
}

原因: i在使用前递增。在for循环中设置退出条件

编辑: 这是您的用例的完整代码。

String[] arrayOfString=localMultiAutoCompleteTextview.getText().toString().split(",");
sp=getActivity().getSharedPreferences("sdat", 2);
ed=sp.edit();

// Get already stored numbers from preference
String oldNumbers = sp.getString("snum", new JSONArray().toString());

JSONArray numberArray;
// Create a JSONArray to store all numbers
try {
    numberArray = new JSONArray(oldNumbers);
} catch (JSONException e) {
    e.printStackTrace();
    numberArray = new JSONArray();
}

/// Loop through the multiautocomplete textview value array
for(int i=0; i < arrayOfString.length; i++)
{
    // Check whether the string contains '%'
    if(arrayOfString[i].contains("%"))
    {
        // Add numbers to the already existing array of numbers
        numberArray.put(arrayOfString[i].split("%")[1]);
    }
}

// Store the complete number array in preference as String
ed.putString("snum", numberArray.toString());
ed.commit();


// To read the numbers after saving
String display = sp.getString("snum", new JSONArray().toString());
System.out.println(display);

编辑2: 要摆脱引号,请将首选项字符串转换为JSONArray并对其进行迭代。

// To get rid of quotes
try {
    JSONArray arr = new JSONArray(display);

    for(int j=0; j<arr.length(); j++)
    {
        String number = arr.getString(j);
        System.out.println(j+" - numberWithoutQuotes : "+number);
    }

} catch (JSONException e) {
    e.printStackTrace();
}
于 2015-06-17T10:52:13.670 回答
0
The error is coming due below two lines. After spliting you have check the length of array. 

Your Code
if(arrayOfString[i].contains("%"))
           str2 = arrayOfString[i].split("%")[1];


It should be like below.

if(arrayOfString[i].contains("%")){
           String[] str3 = arrayOfString[i].split("%");
if(str3.lenght >=2)
str2 = str3[1];
}
于 2015-06-17T10:52:23.600 回答