NullPointerException: nom == null

Je voudrais développer une application Android qui utilise des Fragments. J'ai eu cette erreur.

Caused by: java.lang.NullPointerException: name == null

Ce n' name == null veux dire? Voici le log complet

08-04 15:02:22.422: E/AndroidRuntime(2499): FATAL EXCEPTION: main
08-04 15:02:22.422: E/AndroidRuntime(2499): java.lang.RuntimeException: Unable to start activity ComponentInfo{fi.peltoset.mikko.home/fi.peltoset.mikko.home.Koti}: android.view.InflateException: Binary XML file line #17: Error inflating class fragment
08-04 15:02:22.422: E/AndroidRuntime(2499):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2059)
08-04 15:02:22.422: E/AndroidRuntime(2499):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084)
08-04 15:02:22.422: E/AndroidRuntime(2499):     at android.app.ActivityThread.access$600(ActivityThread.java:130)
08-04 15:02:22.422: E/AndroidRuntime(2499):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195)
08-04 15:02:22.422: E/AndroidRuntime(2499):     at android.os.Handler.dispatchMessage(Handler.java:99)
08-04 15:02:22.422: E/AndroidRuntime(2499):     at android.os.Looper.loop(Looper.java:137)
08-04 15:02:22.422: E/AndroidRuntime(2499):     at android.app.ActivityThread.main(ActivityThread.java:4745)
08-04 15:02:22.422: E/AndroidRuntime(2499):     at java.lang.reflect.Method.invokeNative(Native Method)
08-04 15:02:22.422: E/AndroidRuntime(2499):     at java.lang.reflect.Method.invoke(Method.java:511)
08-04 15:02:22.422: E/AndroidRuntime(2499):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
08-04 15:02:22.422: E/AndroidRuntime(2499):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
08-04 15:02:22.422: E/AndroidRuntime(2499):     at dalvik.system.NativeStart.main(Native Method)
08-04 15:02:22.422: E/AndroidRuntime(2499): Caused by: android.view.InflateException: Binary XML file line #17: Error inflating class fragment
08-04 15:02:22.422: E/AndroidRuntime(2499):     at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:704)
08-04 15:02:22.422: E/AndroidRuntime(2499):     at android.view.LayoutInflater.rInflate(LayoutInflater.java:746)
08-04 15:02:22.422: E/AndroidRuntime(2499):     at android.view.LayoutInflater.inflate(LayoutInflater.java:489)
08-04 15:02:22.422: E/AndroidRuntime(2499):     at android.view.LayoutInflater.inflate(LayoutInflater.java:396)
08-04 15:02:22.422: E/AndroidRuntime(2499):     at android.view.LayoutInflater.inflate(LayoutInflater.java:352)
08-04 15:02:22.422: E/AndroidRuntime(2499):     at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:256)
08-04 15:02:22.422: E/AndroidRuntime(2499):     at android.app.Activity.setContentView(Activity.java:1867)
08-04 15:02:22.422: E/AndroidRuntime(2499):     at fi.peltoset.mikko.home.Koti.onCreate(Koti.java:13)
08-04 15:02:22.422: E/AndroidRuntime(2499):     at android.app.Activity.performCreate(Activity.java:5008)
08-04 15:02:22.422: E/AndroidRuntime(2499):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079)
08-04 15:02:22.422: E/AndroidRuntime(2499):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2023)
08-04 15:02:22.422: E/AndroidRuntime(2499):     ... 11 more
08-04 15:02:22.422: E/AndroidRuntime(2499): Caused by: java.lang.NullPointerException: name == null
08-04 15:02:22.422: E/AndroidRuntime(2499):     at java.lang.VMClassLoader.findLoadedClass(Native Method)
08-04 15:02:22.422: E/AndroidRuntime(2499):     at java.lang.ClassLoader.findLoadedClass(ClassLoader.java:354)
08-04 15:02:22.422: E/AndroidRuntime(2499):     at java.lang.ClassLoader.loadClass(ClassLoader.java:491)
08-04 15:02:22.422: E/AndroidRuntime(2499):     at java.lang.ClassLoader.loadClass(ClassLoader.java:461)
08-04 15:02:22.422: E/AndroidRuntime(2499):     at android.app.Fragment.instantiate(Fragment.java:574)
08-04 15:02:22.422: E/AndroidRuntime(2499):     at android.app.Fragment.instantiate(Fragment.java:552)
08-04 15:02:22.422: E/AndroidRuntime(2499):     at android.app.Activity.onCreateView(Activity.java:4656)
08-04 15:02:22.422: E/AndroidRuntime(2499):     at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:680)
08-04 15:02:22.422: E/AndroidRuntime(2499):     ... 21 more

C'est dans une classe appelée Navigation. Il s'étend android.app.Fragment.

Dans onCreateView méthode que j'gonfler la mise en page et de le retourner. Dans le onActivityCreated méthode-je vérifier si la mise en page se compose de deux volets (j'ai des mises en page différentes pour les différents périphériques) et sur cette base je ajouter onClickListeners.

Mon code ressemble à ceci.

public class Navigation extends Fragment {
private OnItemSelectedListener listener;
private boolean dualPane = false;
public interface OnItemSelectedListener {
public void onMenuItemSelected(int fragmentId);
}
public void onAttach(Activity activity) {
super.onAttach(activity);
if(activity instanceof OnItemSelectedListener) {
this.listener = (OnItemSelectedListener) activity;
} else {
...
}
}
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.activity_navigation, container, false);
return view;
}
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
View contentPane = getActivity().findViewById(R.id.contentFragment);
dualPane = contentPane != null && contentPane.getVisibility() == View.VISIBLE;
if(dualPane) {
final ListView menu = (ListView) getActivity().findViewById(R.id.valikko);
menu.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
String[] texts = new String[] {
...
};
ArrayList<MenuItem> items = new ArrayList<MenuItem>();
items.add(new MenuItem("Home", R.drawable.koti2));
...
ImageArrayAdapter adapter = new ImageArrayAdapter(getActivity(), items, texts);
menu.setAdapter(adapter);
menu.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
String item = ((TextView) view.findViewById(R.id.label)).getText().toString();
listener.onMenuItemSelected(0); //TODO ...
}           
});
} else {
ImageView btnYleiskatsaus   = (ImageView) getActivity().findViewById(R.id.btnYleiskatsaus);
...
btnYleiskatsaus.setOnClickListener(onMenuClikkedListener);
...
}       
}
private OnClickListener onMenuClikkedListener = new OnClickListener() {
@Override
public void onClick(View v) {           
...         
}
};
}

Le fichier de mise en page layout-sw720dp-land/activity_navigation.xml regarde ce

<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/pressed_koti"
android:orientation="vertical" >
<ListView
android:id="@+id/valikko"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1" >
</ListView>
</LinearLayout>

Ici est la activity_koti.xml fichier.

<?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="horizontal" >
<fragment 
android:id="@+id/menuFragment"
android:layout_width="300dp"
android:layout_height="match_parent"
class="fi.peltoset.mikko.home.Navigation" />
<fragment 
android:id="@+id/contentFragment"
android:layout_width="fill_parent"
android:layout_height="match_parent" />
</LinearLayout>

J'ai couru à la demande sur un émulateur avec Android 4.1.2.

Quelles sont les causes de ces erreurs et comment les corriger?

Je sais ce que c'est, mais je me demandais d'où cela provenait. Ne peut pas le trouver dans le code...
Ce qui est en fi.peltoset.mikko.home.Koti.onCreate(Koti.java:13) il apparaît que ce est là que votre code est à l'origine de la trace de la pile
C'est l'écran applications de l'Activité de la méthode onCreate et sur cette ligne, il y a setContentView(R.layout.activity_koti);
Montrer que le fichier xml puis, pas l'autre.
Vous devez vérifier que quel que soit le fichier XML R. la mise en page est stockée que activity_koti est correctement définie. Si c'est le cas, vérifiez le acitivity_koti.xml pour les erreurs.

OriginalL'auteur MikkoP | 2013-08-06