Android错误:应用程序意外停止请再试一次

我做了一个工作正常的应用程序。 它显示应用程序启动的次数。 这是代码:

import android.app.Activity; import android.content.SharedPreferences; import android.os.Bundle; import android.preference.PreferenceManager; import android.widget.TextView; public class PreferencesDemo extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); // Get the app's shared preferences SharedPreferences app_preferences = PreferenceManager.getDefaultSharedPreferences(this); // Get the value for the run counter int counter = app_preferences.getInt("counter", 0); // Update the TextView TextView text = (TextView) findViewById(R.id.text); text.setText("This app has been started " + counter + " times."); // Increment the counter SharedPreferences.Editor editor = app_preferences.edit(); editor.putInt("counter", ++counter); editor.commit(); // Very important } } 

如果我将int变量更改为string,则会抛出错误消息:“app已意外停止..请稍后再试”。 这是抛出错误的代码:

 import android.app.Activity; import android.content.SharedPreferences; import android.os.Bundle; import android.preference.PreferenceManager; import android.widget.TextView; public class pref extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); String c = prefs.getString("c", "hello"); TextView t = (TextView)findViewById(R.id.te); t.append(c); SharedPreferences.Editor edit = prefs.edit(); edit.putString("c", "There"); edit.commit(); } 

}

谁能告诉我哪里出错了? 提供:我在main.xml文件中正确提到了textview。

以下是LogCat详细信息:

 07-11 15:49:12.908: DEBUG/AndroidRuntime(521): >>>>>>>>>>>>>> AndroidRuntime START <<<<<<<<<<<<<>>>>>>>>>>>>> AndroidRuntime START <<<<<<<<<<<<<< 07-11 15:49:20.359: DEBUG/AndroidRuntime(530): CheckJNI is ON 07-11 15:49:20.739: DEBUG/AndroidRuntime(530): --- registering native functions --- 07-11 15:49:22.492: INFO/ActivityManager(68): Starting activity: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10000000 cmp=com.webkul.pref/.pref } 07-11 15:49:26.996: WARN/ActivityManager(68): Activity pause timeout for HistoryRecord{43f1d590 com.android.launcher/com.android.launcher2.Launcher} 07-11 15:49:27.484: DEBUG/AndroidRuntime(530): Shutting down VM 07-11 15:49:27.619: DEBUG/dalvikvm(530): Debugger has detached; object registry had 1 entries 07-11 15:49:28.649: INFO/ActivityManager(68): Start proc com.webkul.pref for activity com.webkul.pref/.pref: pid=537 uid=10038 gids={} 07-11 15:49:31.339: DEBUG/AndroidRuntime(537): Shutting down VM 07-11 15:49:31.339: WARN/dalvikvm(537): threadid=1: thread exiting with uncaught exception (group=0x4001d800) 07-11 15:49:31.438: ERROR/AndroidRuntime(537): FATAL EXCEPTION: main 07-11 15:49:31.438: ERROR/AndroidRuntime(537): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.webkul.pref/com.webkul.pref.pref}: java.lang.ClassCastException: java.lang.Integer 07-11 15:49:31.438: ERROR/AndroidRuntime(537): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663) 07-11 15:49:31.438: ERROR/AndroidRuntime(537): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679) 07-11 15:49:31.438: ERROR/AndroidRuntime(537): at android.app.ActivityThread.access$2300(ActivityThread.java:125) 07-11 15:49:31.438: ERROR/AndroidRuntime(537): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033) 07-11 15:49:31.438: ERROR/AndroidRuntime(537): at android.os.Handler.dispatchMessage(Handler.java:99) 07-11 15:49:31.438: ERROR/AndroidRuntime(537): at android.os.Looper.loop(Looper.java:123) 07-11 15:49:31.438: ERROR/AndroidRuntime(537): at android.app.ActivityThread.main(ActivityThread.java:4627) 07-11 15:49:31.438: ERROR/AndroidRuntime(537): at java.lang.reflect.Method.invokeNative(Native Method) 07-11 15:49:31.438: ERROR/AndroidRuntime(537): at java.lang.reflect.Method.invoke(Method.java:521) 07-11 15:49:31.438: ERROR/AndroidRuntime(537): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 07-11 15:49:31.438: ERROR/AndroidRuntime(537): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 07-11 15:49:31.438: ERROR/AndroidRuntime(537): at dalvik.system.NativeStart.main(Native Method) 07-11 15:49:31.438: ERROR/AndroidRuntime(537): Caused by: java.lang.ClassCastException: java.lang.Integer 07-11 15:49:31.438: ERROR/AndroidRuntime(537): at android.app.ContextImpl$SharedPreferencesImpl.getString(ContextImpl.java:2699) 07-11 15:49:31.438: ERROR/AndroidRuntime(537): at com.webkul.pref.pref.onCreate(pref.java:17) 07-11 15:49:31.438: ERROR/AndroidRuntime(537): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 07-11 15:49:31.438: ERROR/AndroidRuntime(537): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627) 07-11 15:49:31.438: ERROR/AndroidRuntime(537): ... 11 more 07-11 15:49:31.646: WARN/ActivityManager(68): Force finishing activity com.webkul.pref/.pref 07-11 15:49:34.053: DEBUG/dalvikvm(68): GC_FOR_MALLOC freed 13421 objects / 615120 bytes in 1300ms 07-11 15:49:34.129: WARN/ActivityManager(68): Activity pause timeout for HistoryRecord{43fd3ee8 com.webkul.pref/.pref} 07-11 15:49:34.739: WARN/ActivityManager(68): Launch timeout has expired, giving up wake lock! 07-11 15:49:37.479: INFO/Process(537): Sending signal. PID: 537 SIG: 9 07-11 15:49:37.559: WARN/InputManagerService(68): Window already focused, ignoring focus gain of: com.android.internal.view.IInputMethodClient$Stub$Proxy@43ebfa20 07-11 15:49:37.779: INFO/ActivityManager(68): Process com.webkul.pref (pid 537) has died. 07-11 15:49:37.889: DEBUG/SntpClient(68): request time failed: java.net.SocketException: Address family not supported by protocol 07-11 15:49:46.680: WARN/ActivityManager(68): Activity destroy timeout for HistoryRecord{43fd3ee8 com.webkul.pref/.pref} 

您需要了解如何在Eclipse中进行调试以及如何使用ADB和DDMS工具。

为了获得有关exception/强制关闭的更多详细信息,您需要在Eclipse中查找名为Logcat的视图(您将在DDMS透视图中找到),您将在何时/什么以及在什么行上查找详细的回溯。

为此,您应该阅读一篇关于使用Eclipse在Android中进行调试的完整文章

替代文字http://www.droidnova.com/blog/wp-content/uploads/2009/09/debugging-3.gif

编辑

它说清楚是什么问题Caused by: java.lang.ClassCastException: java.lang.Integer getString Caused by: java.lang.ClassCastException: java.lang.Integer

来自SharedPreferences的getString()文档

返回首选项值(如果存在)或defValue。 如果存在此名称不是String的首选项,则抛出ClassCastException。

所以我的猜测是你的“c”键的值不同于String。 也许你用putInt()错误地添加了它。

尝试使用getInt()检索“c”键以查看是否仍有exception。

okk现在得到了..添加了一个Context并通过它进行了修改..

 import android.app.Activity; import android.content.Context; import android.content.SharedPreferences; import android.os.Bundle; //import android.preference.PreferenceManager; import android.widget.TextView; public class pref extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Context mContext = this.getApplicationContext(); SharedPreferences prefs = mContext.getSharedPreferences("pref", 0); String c = prefs.getString("c", "hello"); TextView t = (TextView)findViewById(R.id.te); t.append(c); SharedPreferences.Editor edit = prefs.edit(); edit.putString("c", "There"); edit.commit(); } }