我正在构建一个应用程序,当在活动中单击按钮时会弹出一个对话框,并且对话框包含MultiAutoCompleteTextview以选择联系人名称%编号,contactname1%编号,contactname2%编号形式的联系人...
所以现在我被困在一个地方,我必须通过使用逗号“,”拆分MultiAutoCompleteTextview来存储各个联系人,并将它们一个一个地存储在一个名为“arrayOfString”的字符串数组中。
接下来我想在它们之间使用%来分割名称和联系人号码,并使用字符串“setnum”逐个存储所有联系人号码和仅在共享偏好中没有名字的联系人号码。
但当我点击正面按钮保存时,应用程序正在进行删除和重新加载
Initilizations:
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)
PLZ帮我解决了我在大学里的小型项目的代码。三江源。
答案 0 :(得分: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();
}
答案 1 :(得分: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];
}