bonjour, j'essayais la classe SharedPreferences et j'ai créé deux classes, "TestingActivity", étendant android.app.Activity et AccountSettings avec deux fonctions statiques à définir et récupérer une clé de SharedPreferences.Android - démarrage d'une nouvelle activité (java.lang.NullPointerException)
J'ai cette erreur lors de l'exécution intention de l'activité principale:
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
Im commencer l'activité du principal lanceur d'activité avec ce code:
Intent intent= new Intent(this,TestingActivity.class);
startActivity(intent);</i>
La classe d'activité est réel simple et c'est le suivant: paquet 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);
}
}
Le XML TestingActivity est le suivant:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/TextViewInfo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/TextViewInfo_Text" />
<EditText
android:id="@+id/txtPref"
android:inputType="text"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<requestFocus />
</EditText>
<Button
android:id="@+id/btnGuardar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/btn_guardar" />
<Button
android:id="@+id/btnRecuperar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/btn_recuperar" />
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
</LinearLayout>
et le manifeste 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>
Je ne comprends pas pourquoi la méthode OnCreate se bloque, quelqu'un peut-il donner moi un indice? Merci d'avance!
Vous devez définir la vue de contenu avant de pouvoir appeler 'findViewById (...)'. Si vous ne trouvez pas 'findViewById (...)' retournera toujours 'null' pour vos boutons et toute autre chose dans le layout XML. Encore une chose .... 'import es.LandeSoft.R' - n'importer explicitement aucun fichier' R', cela peut vraiment causer des problèmes. – Squonk
Vous devez utiliser setContentView (R.layout.yourlayoutfile) immédiatement après le super.onCreate (savedInstanceState) dans votre fichier TestingActivity.java. –
Vous ne devez pas utiliser de majuscules dans la nomenclature du fichier XML.Nombrez votre TestActivity.xml à test_activity.xml – himanshu