【问题标题】:Android Sharedpreferences and multiple valuesAndroid Sharedpreferences 和多个值
【发布时间】:2014-01-24 07:31:25
【问题描述】:

在我的 Android 应用程序中,我需要将多个值传递给下一个活动。我正在使用 TableLayout 进行显示。应用程序第一次执行时正在获取输出,但使用 SharedPreferences 时,应用程序崩溃了。

第一个活动

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

    editors.putLong("name18",sum18);
    editors.putLong("name19",sum19);
    editors.putLong("name20",sum20);
    editors.putLong("pin",pin);
    editors.putLong("ch",ch);
    editors.putString("log", "log");
    editors.putString("yearstr",yearstr);
    editors.putString("monthstr",monthstr);
    editors.putString("daystr",daystr);

    editors.commit();

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

    //Personal Year
    i.putExtra("name18",sum18 + "");
    //Personal Month
    i.putExtra("name19",sum19 + "");
    //Personal Dya
    i.putExtra("name20",sum20 + "");
    //Current Pinnacle
    i.putExtra("pin", pin + "");
    //Current Challenge
    i.putExtra("ch", ch + "");

    i.putExtra("yearstr", yearstr);
    i.putExtra("monthstr", monthstr);
    i.putExtra("daystr", daystr);

    startActivity(i);
}

TabLayoutActivity

@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
        setContentView(R.layout.tablay_xm);

        SharedPreferences setting = getSharedPreferences(PREFS_NAME, 0);
        if (setting.getString("log", "").toString().equals("log")) 
        {
            pyear = String.valueOf(setting.getString("name18","bo found"));
            pmonth = String.valueOf(setting.getString("name19","bo found"));
            pday = String.valueOf(setting.getString("name20","bo found"));
            pinn = String.valueOf(setting.getString("pin","bo found"));
            chn = String.valueOf(setting.getString("ch","bo found"));

            yearstring = String.valueOf(setting.getString("yearstr","bo found"));
            monthstring= String.valueOf(setting.getString("monthstr","bo found"));
            daystring = String.valueOf(setting.getString("daystr","bo found"));
            ms = getCalc(monthstring);
       }
       else     
       { 
            pyear = getIntent().getStringExtra("name18");
            //pyear = getIntent().getLongExtra("name18", 6);
            pmonth = getIntent().getStringExtra("name19");
            pday = getIntent().getStringExtra("name20");
            pinn = getIntent().getStringExtra("pin");
            chn= getIntent().getStringExtra("ch");
            //value for current year, month and day.
            yearstring = getIntent().getStringExtra("yearstr");
            monthstring = getIntent().getStringExtra("monthstr");
            ms = getCalc(monthstring);

            daystring = getIntent().getStringExtra("daystr");

       }

       TabHost tabHost = getTabHost();

       // Tab for Personal Year
       TabSpec photospec = tabHost.newTabSpec("Personal Year");
       // setting Title and Icon for the Tab
       photospec.setIndicator(yearstring, getResources().getDrawable(R.drawable.icon_photos_tab));
       Intent photosIntent = new Intent(TabLayoutActivity.this, TabPersonalYr.class);
       //Intent for passing the value of Personal Year
       photosIntent.putExtra("pyear", pyear);
       photosIntent.putExtra("pinn", pinn);

       photospec.setContent(photosIntent);     

       // Tab for Personal Month
       TabSpec songspec = tabHost.newTabSpec("Personal Month");        
       songspec.setIndicator(daystring  + " " +  ms, getResources().getDrawable(R.drawable.icon_songs_tab));
       Intent songsIntent = new Intent(TabLayoutActivity.this, TabPersonalMnth.class);
       //Intent for passing the value of Personal Month
       songsIntent.putExtra("pmonth", pmonth);
       songsIntent.putExtra("pday", pday);

       songspec.setContent(songsIntent);

       // Tab for Videos
       TabSpec videospec = tabHost.newTabSpec("Personal Day");
       videospec.setIndicator("Challenge", getResources().getDrawable(R.drawable.icon_videos_tab));
       Intent videosIntent = new Intent(TabLayoutActivity.this, TabPersonalDay.class);
       //Intent for passing the value of Currrent Challenge
       videosIntent.putExtra("chn", chn);
       videospec.setContent(videosIntent);

       // Adding all TabSpec to TabHost
       tabHost.addTab(photospec); // Adding Personal Year tab
       tabHost.addTab(songspec); // Adding Personal Month , Day tab
       tabHost.addTab(videospec); // Adding Challenge tab

       for (int i = 0;i<tabHost.getTabWidget().getChildCount(); i++) 
       {
           tabHost.getTabWidget().getChildAt(i).setBackgroundResource(R.drawable.icon_videos_tab);
            TextView tv = (TextView) tabHost.getTabWidget().getChildAt(i).findViewById(android.R.id.title);
            // tv.setTextColor(Color.parseColor("#000000"));
            tv.setTextColor(Color.parseColor("#FFFFFF"));
       }
       TextView t = (TextView) tabHost.getCurrentTabView().findViewById(android.R.id.title); //for Selected Tab
       t.setTextColor(Color.parseColor("#FFFFFF"));
   }

日志猫

01-24 07:22:43.838: D/InputEventConsistencyVerifier(2956):   0: sent at 7044263000000, KeyEvent { action=ACTION_UP, keyCode=KEYCODE_TAB, scanCode=15, metaState=0, flags=0x8, repeatCount=0, eventTime=7044263, downTime=7044177, deviceId=0, source=0x101 }
01-24 07:22:46.389: D/InputEventConsistencyVerifier(2956): KeyEvent: ACTION_UP but key was not down.
01-24 07:22:46.389: D/InputEventConsistencyVerifier(2956):   in android.widget.EditText{40cd71e8 VFED..CL .F....ID 0,666-480,725 #7f090076 app:id/editText9}
01-24 07:22:46.389: D/InputEventConsistencyVerifier(2956):   0: sent at 7046422000000, KeyEvent { action=ACTION_UP, keyCode=KEYCODE_TAB, scanCode=15, metaState=0, flags=0x8, repeatCount=0, eventTime=7046422, downTime=7046289, deviceId=0, source=0x101 }
01-24 07:22:46.428: I/Choreographer(2956): Skipped 42 frames!  The application may be doing too much work on its main thread.
01-24 07:22:46.879: I/Choreographer(2956): Skipped 68 frames!  The application may be doing too much work on its main thread.
01-24 07:22:48.617: I/Choreographer(2956): Skipped 45 frames!  The application may be doing too much work on its main thread.
01-24 07:22:48.799: I/Choreographer(2956): Skipped 42 frames!  The application may be doing too much work on its main thread.
01-24 07:22:48.988: I/Choreographer(2956): Skipped 50 frames!  The application may be doing too much work on its main thread.
01-24 07:22:49.709: I/Choreographer(2956): Skipped 50 frames!  The application may be doing too much work on its main thread.
01-24 07:22:50.028: I/Choreographer(2956): Skipped 30 frames!  The application may be doing too much work on its main thread.
01-24 07:22:50.188: I/Choreographer(2956): Skipped 40 frames!  The application may be doing too much work on its main thread.
01-24 07:22:51.028: I/Choreographer(2956): Skipped 30 frames!  The application may be doing too much work on its main thread.
01-24 07:22:52.898: D/AndroidRuntime(2956): Shutting down VM
01-24 07:22:52.928: W/dalvikvm(2956): threadid=1: thread exiting with uncaught exception (group=0x40a71930)
01-24 07:22:53.138: E/AndroidRuntime(2956): FATAL EXCEPTION: main
01-24 07:22:53.138: E/AndroidRuntime(2956): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.numero/com.example.numero.TabLayoutActivity}: java.lang.ClassCastException: java.lang.Long cannot be cast to java.lang.String
01-24 07:22:53.138: E/AndroidRuntime(2956):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180)
01-24 07:22:53.138: E/AndroidRuntime(2956):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
01-24 07:22:53.138: E/AndroidRuntime(2956):     at android.app.ActivityThread.access$600(ActivityThread.java:141)
01-24 07:22:53.138: E/AndroidRuntime(2956):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
01-24 07:22:53.138: E/AndroidRuntime(2956):     at android.os.Handler.dispatchMessage(Handler.java:99)
01-24 07:22:53.138: E/AndroidRuntime(2956):     at android.os.Looper.loop(Looper.java:137)
01-24 07:22:53.138: E/AndroidRuntime(2956):     at android.app.ActivityThread.main(ActivityThread.java:5041)
01-24 07:22:53.138: E/AndroidRuntime(2956):     at java.lang.reflect.Method.invokeNative(Native Method)
01-24 07:22:53.138: E/AndroidRuntime(2956):     at java.lang.reflect.Method.invoke(Method.java:511)
01-24 07:22:53.138: E/AndroidRuntime(2956):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
01-24 07:22:53.138: E/AndroidRuntime(2956):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
01-24 07:22:53.138: E/AndroidRuntime(2956):     at dalvik.system.NativeStart.main(Native Method)
01-24 07:22:53.138: E/AndroidRuntime(2956): Caused by: java.lang.ClassCastException: java.lang.Long cannot be cast to java.lang.String
01-24 07:22:53.138: E/AndroidRuntime(2956):     at android.app.SharedPreferencesImpl.getString(SharedPreferencesImpl.java:224)
01-24 07:22:53.138: E/AndroidRuntime(2956):     at com.example.numero.TabLayoutActivity.onCreate(TabLayoutActivity.java:37)
01-24 07:22:53.138: E/AndroidRuntime(2956):     at android.app.Activity.performCreate(Activity.java:5104)
01-24 07:22:53.138: E/AndroidRuntime(2956):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
01-24 07:22:53.138: E/AndroidRuntime(2956):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144)
01-24 07:22:53.138: E/AndroidRuntime(2956):     ... 11 more
01-24 07:22:54.258: D/dalvikvm(2956): GC_CONCURRENT freed 214K, 9% free 3752K/4088K, paused 61ms+98ms, total 1052ms
01-24 07:23:03.158: E/Trace(3008): error opening trace file: No such file or directory (2)
01-24 07:23:06.330: I/Choreographer(3008): Skipped 59 frames!  The application may be doing too much work on its main thread.
01-24 07:23:06.599: D/gralloc_goldfish(3008): Emulator without GPU emulation detected.
01-24 07:23:56.308: I/Choreographer(3008): Skipped 46 frames!  The application may be doing too much work on its main thread.
01-24 07:24:59.598: D/dalvikvm(3008): GC_CONCURRENT freed 98K, 8% free 2671K/2892K, paused 75ms+9ms, total 246ms
01-24 07:26:27.919: I/Choreographer(3008): Skipped 30 frames!  The application may be doing too much work on its main thread.
01-24 07:26:57.708: I/Choreographer(3008): Skipped 31 frames!  The application may be doing too much work on its main thread.
01-24 07:27:18.188: I/Choreographer(3008): Skipped 30 frames!  The application may be doing too much work on its main thread.
01-24 07:28:03.088: I/Choreographer(3008): Skipped 31 frames!  The application may be doing too much work on its main thread.
01-24 07:28:18.118: I/Choreographer(3008): Skipped 30 frames!  The application may be doing too much work on its main thread.

【问题讨论】:

  • 请查看您的堆栈跟踪,所有需要的信息都已存在: 原因:java.lang.ClassCastException:java.lang.Long 无法在 android 中转换为 java.lang.String。 app.SharedPreferencesImpl.getString(SharedPreferencesImpl.java:224) 在 com.example.numero.TabLayoutActivity.onCreate(TabLayoutActivity.java:37)
  • 你能告诉它在哪里..?
  • pyear = String.valueOf(setting.getString("name18","bo found"));
  • 是的 pyear 的变量类型是什么?

标签: android android-intent tabs sharedpreferences


【解决方案1】:

当你输入long时,你必须得到long

pyear = String.valueOf(setting.getLong("name18",-1));
pmonth = String.valueOf(setting.getLong("name19",-1));
pday = String.valueOf(setting.getLong("name20",-1));
pinn = String.valueOf(setting.getLong("pin",-1));
chn = String.valueOf(setting.getLong("ch",-1));

【讨论】:

    【解决方案2】:

    SharedPrefences 中最初的字段“name18”具有 Long 类型:

    editors.putLong("name18",sum18);
    

    但是当你得到这个字段时,你是在试图得到字符串:

    pyear = String.valueOf(setting.getString("name18","bo found"));
    

    你应该使用 getLong()

    顺便说一句,getString()返回的是String,所以不需要在那个方法之后调用toString(),代码如下:

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

    可以重写:

    setting.getString("log", "").equals("log")
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-08-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-06
      • 1970-01-01
      • 2011-03-20
      • 1970-01-01
      相关资源
      最近更新 更多