java - Android Sharedpreference 出错了

标签 java android sharedpreferences

在我的 Android 应用程序中,我在共享首选项中获取用户的详细信息,并在另一个 Activity 中计算并显示结果...但结果显示错误 somehwere..

我附上了下面的代码。

主要 Activity :

String firstName     = et1.getText().toString();
        String middleName    = et2.getText().toString();
        String lastName      = et3.getText().toString();
        String callFirstName = et4.getText().toString();
        String callMiddleName = et5.getText().toString();
        String callLastName = et6.getText().toString();
        String dates         = et7.getText().toString();
        String months        = et8.getText().toString();
        String years         = et9.getText().toString();

else
        {   

             SharedPreferences setting = this.getSharedPreferences(PREFS_NAME,0);
             SharedPreferences.Editor editors = setting.edit();
             editors.putString("log", "log");


                editors.putString("fn", firstName);
                editors.putString("mn",middleName);
                editors.putString("ln",lastName);
                editors.putString("cfn",callFirstName);
                editors.putString("cmn", callMiddleName);
                editors.putString("cln",callLastName);
                editors.putString("dt",dates);
                editors.putString("mt",months);
                editors.putString("yrs",years);

                editors.commit();



            Intent i = new Intent(MainActivity.this, TabLayoutActivity.class);

tablayoutActivity:

if (setting.getString("log", "").toString().equals("log")) 
       {

            firstN = String.valueOf(setting.getString("fn","not found"));
            middleN= String.valueOf(setting.getString("mn","not found"));
            lastN = String.valueOf(setting.getString("ln","not found"));
            callMN = String.valueOf(setting.getString("cmn","not found"));
            callLN= String.valueOf(setting.getString("cln","not found"));
            callFN = String.valueOf(setting.getString("cfn","not found"));
            daY = String.valueOf(setting.getString("dt","not found"));
            montH= String.valueOf(setting.getString("mt","not found"));
            yeaR = String.valueOf(setting.getString("yrs","not found"));


            int yearat =0;
            int monthat = 0;
            int dayat = 0;

            ch   = 0;
            ch1  = 0;
            ch2  = 0;
            ch3  = 0;
            ch4  = 0;
            pin  = 0;
            pin1 = 0;
            pin2 = 0;
            pin3 = 0;
            pin4 = 0; 

            sum11 = 0;
            sum19 = 0;
            sum18 = 0;
            sum20 = 0;
            sum70 = 0;
            sum80 = 0; 
            sum90 = 0;




            GregorianCalendar gc = new GregorianCalendar();
            yearat = gc.get(Calendar.YEAR);
            yearstr = Integer.toString(yearat);
            monthat = gc.get(Calendar.MONTH) + 1;
            monthstr = Integer.toString(monthat);
            dayat = gc.get(Calendar.DAY_OF_MONTH);
            daystr = Integer.toString(dayat);

            int day1 = Integer.parseInt(daY);
            int month1 = Integer.parseInt(montH);
            int year1 = Integer.parseInt(yeaR);



           String s1 = String.valueOf(TabLayoutActivity.this.getAge(year1, month1, day1));



            sum11 = getSum11((daY) + (montH) + (yeaR));
            sum18 = getSum18((yearstr) + (daY + montH));
            sum19 = getSum19((monthstr) + (sum18));
            sum20 = getSum20((daystr) + sum19);

            sum70 = getsum70(daY);
            sum80 = getSum80(montH);
            sum90 = getSum90(yeaR);


            int val      = 0;
            long val1    = sum11;
            //long val   = sum16;
            val          = Integer.valueOf(s1);
            long val2    = 36 - val1;
            int val4     = 9;           
            long val5    = val2 + val4;
            long val6    = val5 + val4;
            long val7    = val6 + 80;

            if (sum70 > sum80)
            {
                ch1 = (sum70 - sum80);
            }
            else
            {
                ch1 = (sum80 - sum70);
            }

            if (sum70 > sum90)
            {
                ch2 = (sum70 - sum90);
            }
            else
            {
                ch2 = (sum90 - sum70);
            }

            if (sum80 > sum90)
            {
                ch4 = (sum80 - sum90);
            }
            else
            {
                ch4 = (sum90 - sum80);
            }


            if (ch1 > ch2)
            {
                ch3 = ch1 - ch2;
            }
            else
            {
                ch3 = ch2 - ch1;
            }



            if (val <= val2)
            {
                ch = ch1;
            }


            else if ((val > val2) && (val <= val5))
            {
                ch = ch2;
            }

            else if ((val > val2) && (val> val5) && (val <= val6))
            {
                ch = ch3;
            }

            else if ((val > val2) && (val> val5) && (val > val6) && (val<= val7))
            {
                ch = ch4;
            }


            /*if (val <= val2)
            {
                pin = pin1;
            }


            else if ((val > val2) && (val <= val5))
            {
                pin = pin2;
            }

            else if ((val > val2) && (val> val5) && (val <= val6))
            {
                pin = pin3;
            }

            else if ((val > val2) && (val> val5) && (val > val6) && (val<= val7))
            {
                pin = pin4;
            }*/


            pyear            = String.valueOf(sum18);
            pmonth           = String.valueOf(sum19);
            pday             = String.valueOf(sum20);
            chn              = String.valueOf(ch);
            pinn             = String.valueOf(pin);

            yearstring       = yearstr;
            monthstring      = monthstr;
            daystring        = daystr;
            ms               = getCalc(monthstring);




       }

    //calculating single value of year
    private long getSum90(String text) {
        // TODO Auto-generated method stub
        long sum90 = 0;
        char[] name90 = new char[text.length()];
               name90 = text.toCharArray();               
               for(int i=0; i<text.length(); i++)
               {
                   sum90 += value18( name90[i] );
                }
                 //while (sum10>9)               
              while (sum90>9 )
               {                     
                   sum90 = findDigitSum90(sum90);                 
               }
        return sum90;
    }

    private long findDigitSum90(long n) {
        // TODO Auto-generated method stub
        int sum90=0;
        while (n != 0) 
        {
         sum90 += n % 10;
         n = n / 10;
        }
        return sum90;
    }
    //calculate single value month
    private long getSum80(String text) {
        // TODO Auto-generated method stub
        long sum80 = 0;
        char[] name80 = new char[text.length()];
               name80 = text.toCharArray();               
               for(int i=0; i<text.length(); i++)
               {
                   sum80 += value18( name80[i] );
                }
                 //while (sum10>9)               
              while (sum80>9 )
               {             
                   sum80 = findDigitSum80(sum80);                 
               }
        return sum80;
    }

日志猫:

01-27 09:05:08.421: I/Choreographer(5431): Skipped 78 frames!  The application may be doing too much work on its main thread.
01-27 09:05:10.792: D/dalvikvm(5431): GC_CONCURRENT freed 112K, 8% free 2688K/2920K, paused 9ms+432ms, total 1177ms
01-27 09:05:11.771: D/AndroidRuntime(5431): Shutting down VM
01-27 09:05:11.771: W/dalvikvm(5431): threadid=1: thread exiting with uncaught exception (group=0x40a71930)
01-27 09:05:12.371: E/AndroidRuntime(5431): FATAL EXCEPTION: main
01-27 09:05:12.371: E/AndroidRuntime(5431): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.numero/com.example.numero.TabLayoutActivity}: java.lang.NumberFormatException: Invalid int: "not found"
01-27 09:05:12.371: E/AndroidRuntime(5431):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180)
01-27 09:05:12.371: E/AndroidRuntime(5431):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
01-27 09:05:12.371: E/AndroidRuntime(5431):     at android.app.ActivityThread.access$600(ActivityThread.java:141)
01-27 09:05:12.371: E/AndroidRuntime(5431):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
01-27 09:05:12.371: E/AndroidRuntime(5431):     at android.os.Handler.dispatchMessage(Handler.java:99)
01-27 09:05:12.371: E/AndroidRuntime(5431):     at android.os.Looper.loop(Looper.java:137)
01-27 09:05:12.371: E/AndroidRuntime(5431):     at android.app.ActivityThread.main(ActivityThread.java:5041)
01-27 09:05:12.371: E/AndroidRuntime(5431):     at java.lang.reflect.Method.invokeNative(Native Method)
01-27 09:05:12.371: E/AndroidRuntime(5431):     at java.lang.reflect.Method.invoke(Method.java:511)
01-27 09:05:12.371: E/AndroidRuntime(5431):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
01-27 09:05:12.371: E/AndroidRuntime(5431):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
01-27 09:05:12.371: E/AndroidRuntime(5431):     at dalvik.system.NativeStart.main(Native Method)
01-27 09:05:12.371: E/AndroidRuntime(5431): Caused by: java.lang.NumberFormatException: Invalid int: "not found"
01-27 09:05:12.371: E/AndroidRuntime(5431):     at java.lang.Integer.invalidInt(Integer.java:138)
01-27 09:05:12.371: E/AndroidRuntime(5431):     at java.lang.Integer.parse(Integer.java:375)
01-27 09:05:12.371: E/AndroidRuntime(5431):     at java.lang.Integer.parseInt(Integer.java:366)
01-27 09:05:12.371: E/AndroidRuntime(5431):     at java.lang.Integer.parseInt(Integer.java:332)
01-27 09:05:12.371: E/AndroidRuntime(5431):     at com.example.numero.TabLayoutActivity.onCreate(TabLayoutActivity.java:83)
01-27 09:05:12.371: E/AndroidRuntime(5431):     at android.app.Activity.performCreate(Activity.java:5104)
01-27 09:05:12.371: E/AndroidRuntime(5431):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
01-27 09:05:12.371: E/AndroidRuntime(5431):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144)
01-27 09:05:12.371: E/AndroidRuntime(5431):     ... 11 more
01-27 09:10:13.672: I/Process(5431): Sending signal. PID: 5431 SIG: 9

最佳答案

问题是这样的:

daY = String.valueOf(setting.getString("dt","not found"));

然后:

int day1 = Integer.parseInt(daY);

您无法将“未找到”转换为整数。

编辑:

在进一步使用该函数之前,您可以使用此函数来确定该值是否为字符串。或者使用该点提供默认值。

http://developer.android.com/reference/android/text/TextUtils.html#isDigitsOnly(java.lang.CharSequence)

关于java - Android Sharedpreference 出错了,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21378527/

相关文章:

java - 使用可变对象作为常量

android - 使用 alarmmanager 取消所有设置的警报

android - 蓝牙服务器线程会待机吗?

java - 使用 SharedPreferences 和 Editor 作为成员

android - 共享首选项不会在关闭应用程序或 Activity 之前保存

java - 检查 wifi 是否启用和共享首选项

Java编程帮助

java - 获得此输出的可能原因是什么?

java - 为什么我的 ArrayList 包含添加到列表中的最后一项的 N 个副本?

android - iosched 13 应用程序中的导航是否正确?