【问题标题】:Contacts storage in Shared Preferences共享首选项中的联系人存储
【发布时间】:2015-06-18 15:12:23
【问题描述】:

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

所以现在我被困在一个地方,我必须通过使用逗号“,”拆分 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)

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

【问题讨论】:

    标签: android sharedpreferences multiautocompletetextview


    【解决方案1】:

    使用下面的增量。

    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) 号码已存储,但它们已存储为 ["contactnumber1","quote;contactnumber2""quote;contactnumber3"].. 如何摆脱 &quote;在数字和方括号的前面和后面。 2)保存数字后,如果我想通过替换旧数字来插入新数字,应该做些什么,因为新数字被添加但没有被替换。谢谢你的帮助兄弟请帮我解决这两个问题
    • 共享首选项中存储的手机号码应用于向手机发送警报短信,因此请帮助我纠正它。
    • 兄弟我删除了旧号码的代码,现在每次数据都被存储为新的所以不用担心第二个问题...请帮助我解决第一个问题,我不想保存整个数组与报价只是 number1,number2,number3 以便这些号码可以由 SMS 应用程序使用,并在紧急情况下通过按下按钮直接发送警报消息。谢谢您的帮助。真的:)
    • 在我的回答中查看 Edit2
    【解决方案2】:
    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-04-24
      • 1970-01-01
      • 1970-01-01
      • 2011-09-03
      • 1970-01-01
      • 2016-04-04
      • 2015-10-17
      • 2013-09-16
      相关资源
      最近更新 更多