2012-01-13 111 views
1

早上好,我在尝试SharedPreferences类,我创建了两个类“TestingActivity”,扩展了android.app.Activity和AccountSettings两个静态函数来设置和从SharedPreferences中恢复一个KEY。Android - 开始新的活动(java.lang.NullPointerException)

我同时从主活动运行的意图有此错误

01-12 17:18:47.890: E/AndroidRuntime(5539): FATAL EXCEPTION: main 
    01-12 17:18:47.890: E/AndroidRuntime(5539): java.lang.RuntimeException: Unable to start activity ComponentInfo{es.LandeSoft/es.LandeSoft.TestingActivity}: java.lang.NullPointerException 
    01-12 17:18:47.890: E/AndroidRuntime(5539):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1651) 
    01-12 17:18:47.890: E/AndroidRuntime(5539):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1667) 
    01-12 17:18:47.890: E/AndroidRuntime(5539):  at android.app.ActivityThread.access$1500(ActivityThread.java:117) 
    01-12 17:18:47.890: E/AndroidRuntime(5539):  at  android.app.ActivityThread$H.handleMessage(ActivityThread.java:935) 
    01-12 17:18:47.890: E/AndroidRuntime(5539):  at android.os.Handler.dispatchMessage(Handler.java:99) 
    01-12 17:18:47.890: E/AndroidRuntime(5539):  at android.os.Looper.loop(Looper.java:130) 
    01-12 17:18:47.890: E/AndroidRuntime(5539):  at android.app.ActivityThread.main(ActivityThread.java:3691) 
    01-12 17:18:47.890: E/AndroidRuntime(5539):  at java.lang.reflect.Method.invokeNative(Native Method) 
    01-12 17:18:47.890: E/AndroidRuntime(5539):  at java.lang.reflect.Method.invoke(Method.java:507) 
    01-12 17:18:47.890: E/AndroidRuntime(5539):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:907) 
    01-12 17:18:47.890: E/AndroidRuntime(5539):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:665) 
    01-12 17:18:47.890: E/AndroidRuntime(5539):  at dalvik.system.NativeStart.main(Native Method) 
    01-12 17:18:47.890: E/AndroidRuntime(5539): Caused by: java.lang.NullPointerException 
    01-12 17:18:47.890: E/AndroidRuntime(5539):  at es.LandeSoft.TestingActivity.onCreate(TestingActivity.java:30) 
    01-12 17:18:47.890: E/AndroidRuntime(5539):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
    01-12 17:18:47.890: E/AndroidRuntime(5539):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1615) 
    01-12 17:18:47.890: E/AndroidRuntime(5539):  ... 11 more 

即时通讯开始从主活动启动活动,此代码:

Intent intent= new Intent(this,TestingActivity.class); 
startActivity(intent);</i> 

Activity类是真实的简单,它是以下内容: 包es.LandeSoft;

import es.LandeSoft.R; 
    import android.app.Activity; 
    import android.os.Bundle; 
    import android.view.Gravity; 
    import android.view.View; 
    import android.view.View.OnClickListener; 
    import android.widget.Button; 
    import android.widget.EditText; 
    import android.widget.TextView; 
    import android.widget.Toast; 

    public class TestingActivity extends Activity { 

    TextView lblDatos=null; 
    EditText DatosAGuardar =null; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 
     super.onCreate(savedInstanceState); 

     Button botonGuardar = (Button) findViewById(R.id.btnGuardar); 
     Button botonRecuperar = (Button) findViewById(R.id.btnRecuperar); 
     lblDatos = (TextView) findViewById(R.id.textView1); 
     DatosAGuardar= (EditText) findViewById(R.id.txtPref); 

     botonGuardar.setOnClickListener(new OnClickListener() {   
      @Override 
      public void onClick(View v) {    
       AccountSettings.SavePassword(getApplicationContext(),"PASSWORD_APP",DatosAGuardar.getText().toString()); 
       ShowToast("Se ha guardado el password: " + DatosAGuardar.getText().toString() , 2500); 
      } 
     }); 

     botonRecuperar.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       String clave= AccountSettings.GetPassword(getApplicationContext(), "PASSWORD_APP"); 
       lblDatos.setText(clave); 
       ShowToast("Clave Recuperada: " + clave,2000); 

      } 
     }); 

    } 

    private void ShowToast(String MessageT, int Duracion) 
    { 
      Toast miTostada= new Toast(getApplicationContext()); 
      miTostada.setText(MessageT); 
      miTostada.setDuration(Duracion); 
      miTostada.setGravity(Gravity.CENTER,0,0); 
      miTostada.show(); 

    } 
} 


**The AccountSettings.java is the following:** 

    package es.LandeSoft; 

    import android.content.Context; 
    import android.content.SharedPreferences; 
    import android.content.SharedPreferences.Editor; 

    public class AccountSettings { 


    public static String GetPassword (Context Contexto, String Key) 
    { 
     SharedPreferences savedSession=  Contexto.getSharedPreferences(Key,Context.MODE_PRIVATE); 
     return savedSession.getString(Key, null);  
    } 

    public static void SavePassword(Context context, String Key, String Value) 
    { 
     Editor editor = context.getSharedPreferences(Key,Context.MODE_PRIVATE).edit(); 
       editor.putString(Key, Value);   

    } 


} 

的TestingActivity XML如下:

​​

和Android清单:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
     package="es.LandeSoft" 
     android:versionCode="1" 
     android:versionName="1.0"> 
    <uses-sdk android:minSdkVersion="8" /> 
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> 
    <uses-permission android:name="android.permission.UPDATE_DEVICE_STATS"/> 
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> 
    <uses-permission android:name="android.permission.WAKE_LOCK" /> 
    <uses-permission android:name="android.permission.INTERNET"/> 



    <application android:label="@string/app_name" 
       android:debuggable="true" 
       android:icon="@drawable/landesofticon"> 
       <activity android:name="es.LandeSoft.LandeSoftActivity" 
        android:label="@string/app_name">     

        <intent-filter> 
        <action android:name="android.intent.action.MAIN" /> 
        <category android:name="android.intent.category.LAUNCHER" /> 
        </intent-filter> 
       </activity> 

       <activity android:name="es.LandeSoft.FacebookClass"></activity> 
       <activity android:name="es.LandeSoft.TestingActivity"></activity> 

    </application> 
</manifest> 

我不明白为什么onCreate方法崩溃,有人可以给我是一个线索? 在此先感谢!

+0

您必须设置内容视图,然后才能调用findViewById(...)'。如果你不这样做,'findViewById(...)'将总是返回'null'给你的按钮和布局XML中的其他东西。还有一件事......'导入es.LandeSoft.R' - 不明确导入任何'R'文件,它确实会导致问题。 – Squonk 2012-01-13 07:56:54

+0

必须在您的TestingActivity.java文件中的super.onCreate(savedInstanceState)之后立即使用setContentView(R.layout.yourlayoutfile) – 2012-01-13 07:59:14

+0

您不应在xml文件命名中使用大写字母。请将您的TestActivity.xml重命名为test_activity.xml – himanshu 2012-01-13 07:59:40

回答

3

我看不到你的R.layout.main为你的布局或你的TestingActivity.xml被调用。检查是否有

+0

谢谢,我意外删除它,并没有意识到它不存在 – 2012-01-13 07:59:56

+1

酷:)幸运@Vamshi谁得到了他的答案,即使他回答了最后接受:) – 2012-01-13 08:07:41

+0

改变了投票。我的移动版本检查错误。谢谢@ Rashmi.B – 2012-01-13 14:47:02

2

没有setContentView(R.layout.yourxml); 在你的代码

+2

哦,耶稣,我应该删除它不知不觉中。非常感谢你!。 4只眼睛比两只好! :D – 2012-01-13 07:57:46

+0

好吧,现在它工作?如果是接受答案 – Vamshi 2012-01-13 08:00:21

1

的setContentView(R.layout.main);在您的TestingActivity.class文件中不显示。如果没有添加,请添加此。

0

是Rashmi.B是正确的我也找不到setContentView(R.layout.TestingActivity);。在你的onCreate()方法中添加行并再次运行代码。

0

您在onCreate方法中缺少setContentView(R.layout。)。 取代你的。

:)