2010-07-11 123 views
3

我做了一个应用程序,它工作正常。它显示应用程序已启动的次数。下面的代码: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变量:“应用程序已意外停止后..请重试”。下面是抛出错误代码:

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(); 
    } 

}

谁能告诉我其中m我的问题呢?提供的:我已经正确地提到main.xml文件中的textview。

这里是logcat的细节:

07-11 15:49:12.908: DEBUG/AndroidRuntime(521): >>>>>>>>>>>>>> AndroidRuntime START <<<<<<<<<<<<<< 
07-11 15:49:12.918: DEBUG/AndroidRuntime(521): CheckJNI is ON 
07-11 15:49:15.459: DEBUG/AndroidRuntime(521): --- registering native functions --- 
07-11 15:49:19.049: DEBUG/AndroidRuntime(521): Shutting down VM 
07-11 15:49:19.049: DEBUG/dalvikvm(521): Debugger has detached; object registry had 1 entries 
07-11 15:49:19.079: INFO/AndroidRuntime(521): NOTE: attach of thread 'Binder Thread #4' failed 
07-11 15:49:20.349: DEBUG/AndroidRuntime(530): >>>>>>>>>>>>>> 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: [email protected] 
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} 
+0

试着看看logcat - 异常回溯可能会在那里,揭示错误原因。 如果可以,请张贴回溯。 – adamk 2010-07-11 10:12:16

回答

0

OKK得到了现在..添加一个上下文,并通过它参考..

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(); 
    } 
} 
+0

“活动”是一个“上下文”。 'getApplicationContext()'在这里是不必要的。 – adamp 2010-07-12 00:39:15

8

你需要学习如何在Eclipse中调试和如何使用ADBDDMS工具。

为了获得关于异常/强制关闭的更多细节,您需要在Eclipse中查找名为Logcat的视图(您将在DDMS的透视图中找到),您将找到详细的跟踪时间/内容和行是问题。

为此,您应该阅读完整文章约Debugging in Android using Eclipse

alt text http://www.droidnova.com/blog/wp-content/uploads/2009/09/debugging-3.gif

编辑

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

1

getString()的文档从SharedPreferences

Returns the preference value if it exists, or defValue. Throws ClassCastException if there is a preference with this name that is not a String.

所以我的猜测是,你有一个比一个不同的字符串值“C”键。也许你错误地用putInt()加了它。

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

相关问题