NullPointerException: name == null

I am developing an Android application that uses fragments. I got this error.

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

What does name == null mean? Here is the full magazine

 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 

This is a class called Navigation . It extends android.app.Fragment .

In it, the onCreateView method onCreateView the layout and onCreateView it. In the onActivityCreated method onActivityCreated I check if the layout has two panels (I have different layouts for different devices), and based on this I add onClickListeners to them.

My code is as follows.

 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) { ... } }; } 

The layout file layout-sw720dp-land/activity_navigation.xml looks like this:

 <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> 

Here is the activity_koti.xml file.

 <?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> 

I launched the application on an emulator with Android 4.1.2.

What causes these errors and how to fix them?

+4
source share
3 answers

You should use android:name to indicate your fragments instead of class , you also need to include the same attribute for your second fragment, this explains name==null .

Edit: Obviously, the class can be interchangeable with android: name , but I will keep track of what documents use.

It should be:

 <?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" android:name="fi.peltoset.mikko.home.Navigation" /> <fragment android:id="@+id/contentFragment" android:layout_width="fill_parent" android:layout_height="match_parent" android:name="I NEED A NAME" /> </LinearLayout> 

http://developer.android.com/training/basics/fragments/creating.html#AddInLayout

+6
source

When you add a fragment to an XML file, you need to specify the name attribute. This is why it says "name = null" because you do not.

See the guide for adding snippets for more information .

+1
source

Try adding a class to the second snippet in activity_koti.xml if you reference it in FragmentActivity .

Or, as Robadob says, add android:name:"your.path.YourName" to both.

Interesting additional information about class vs android:name in the XML links to Fragment here .

0
source

Source: https://habr.com/ru/post/1495547/


All Articles