【发布时间】: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