NullPointerException in getView Of Adapter extends BaseAdapter

为君一笑 提交于 2019-12-12 04:47:52

问题


I am populating listview for search in tabwidget.My list contain an image and textview.Without TabWidget it works fines but in TabWidget it gives error .I have error in getview My locat is

08-07 16:24:44.300: E/AndroidRuntime(20166): FATAL EXCEPTION: main
08-07 16:24:44.300: E/AndroidRuntime(20166): java.lang.NullPointerException
08-07 16:24:44.300: E/AndroidRuntime(20166):    at com.example.project.SearchDictionaryActivity$MyCustomAdapter.getView(SearchDictionaryActivity.java:392)
08-07 16:24:44.300: E/AndroidRuntime(20166):    at android.widget.AbsListView.obtainView(AbsListView.java:2485)
08-07 16:24:44.300: E/AndroidRuntime(20166):    at android.widget.ListView.measureHeightOfChildren(ListView.java:1250)
08-07 16:24:44.300: E/AndroidRuntime(20166):    at android.widget.ListView.onMeasure(ListView.java:1161)
08-07 16:24:44.300: E/AndroidRuntime(20166):    at android.view.View.measure(View.java:12842)
08-07 16:24:44.300: E/AndroidRuntime(20166):    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4712)
08-07 16:24:44.300: E/AndroidRuntime(20166):    at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1385)
08-07 16:24:44.300: E/AndroidRuntime(20166):    at android.widget.LinearLayout.measureVertical(LinearLayout.java:670)
08-07 16:24:44.300: E/AndroidRuntime(20166):    at android.widget.LinearLayout.onMeasure(LinearLayout.java:563)
08-07 16:24:44.300: E/AndroidRuntime(20166):    at android.view.View.measure(View.java:12842)
08-07 16:24:44.300: E/AndroidRuntime(20166):    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4712)
08-07 16:24:44.300: E/AndroidRuntime(20166):    at android.widget.FrameLayout.onMeasure(FrameLayout.java:293)
08-07 16:24:44.300: E/AndroidRuntime(20166):    at android.view.View.measure(View.java:12842)
08-07 16:24:44.300: E/AndroidRuntime(20166):    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4712)
08-07 16:24:44.300: E/AndroidRuntime(20166):    at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1385)
08-07 16:24:44.300: E/AndroidRuntime(20166):    at android.widget.LinearLayout.measureVertical(LinearLayout.java:670)
08-07 16:24:44.300: E/AndroidRuntime(20166):    at android.widget.LinearLayout.onMeasure(LinearLayout.java:563)
08-07 16:24:44.300: E/AndroidRuntime(20166):    at android.view.View.measure(View.java:12842)
08-07 16:24:44.300: E/AndroidRuntime(20166):    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4712)
08-07 16:24:44.300: E/AndroidRuntime(20166):    at android.widget.FrameLayout.onMeasure(FrameLayout.java:293)
08-07 16:24:44.300: E/AndroidRuntime(20166):    at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2242)
08-07 16:24:44.300: E/AndroidRuntime(20166):    at android.view.View.measure(View.java:12842)
08-07 16:24:44.300: E/AndroidRuntime(20166):    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4712)
08-07 16:24:44.300: E/AndroidRuntime(20166):    at android.widget.FrameLayout.onMeasure(FrameLayout.java:293)
08-07 16:24:44.300: E/AndroidRuntime(20166):    at android.view.View.measure(View.java:12842)
08-07 16:24:44.300: E/AndroidRuntime(20166):    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4712)
08-07 16:24:44.300: E/AndroidRuntime(20166):    at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1385)
08-07 16:24:44.300: E/AndroidRuntime(20166):    at android.widget.LinearLayout.measureVertical(LinearLayout.java:670)
08-07 16:24:44.300: E/AndroidRuntime(20166):    at android.widget.LinearLayout.onMeasure(LinearLayout.java:563)
08-07 16:24:44.300: E/AndroidRuntime(20166):    at android.view.View.measure(View.java:12842)
08-07 16:24:44.300: E/AndroidRuntime(20166):    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4712)
08-07 16:24:44.300: E/AndroidRuntime(20166):    at android.widget.FrameLayout.onMeasure(FrameLayout.java:293)
08-07 16:24:44.300: E/AndroidRuntime(20166):    at android.view.View.measure(View.java:12842)
08-07 16:24:44.300: E/AndroidRuntime(20166):    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4712)
08-07 16:24:44.300: E/AndroidRuntime(20166):    at android.widget.FrameLayout.onMeasure(FrameLayout.java:293)
08-07 16:24:44.300: E/AndroidRuntime(20166):    at android.view.View.measure(View.java:12842)
08-07 16:24:44.300: E/AndroidRuntime(20166):    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4712)
08-07 16:24:44.300: E/AndroidRuntime(20166):    at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1385)
08-07 16:24:44.300: E/AndroidRuntime(20166):    at android.widget.LinearLayout.measureVertical(LinearLayout.java:670)
08-07 16:24:44.300: E/AndroidRuntime(20166):    at android.widget.LinearLayout.onMeasure(LinearLayout.java:563)
08-07 16:24:44.300: E/AndroidRuntime(20166):    at android.view.View.measure(View.java:12842)
08-07 16:24:44.300: E/AndroidRuntime(20166):    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4712)
08-07 16:24:44.300: E/AndroidRuntime(20166):    at android.widget.FrameLayout.onMeasure(FrameLayout.java:293)
08-07 16:24:44.300: E/AndroidRuntime(20166):    at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2242)
08-07 16:24:44.300: E/AndroidRuntime(20166):    at android.view.View.measure(View.java:12842)
08-07 16:24:44.300: E/AndroidRuntime(20166):    at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1240)
08-07 16:24:44.300: E/AndroidRuntime(20166):    at android.view.ViewRootImpl.handleMessage(ViewRootImpl.java:2632)
08-07 16:24:44.300: E/AndroidRuntime(20166):    at android.os.Handler.dispatchMessage(Handler.java:99)
08-07 16:24:44.300: E/AndroidRuntime(20166):    at android.os.Looper.loop(Looper.java:137)
08-07 16:24:44.300: E/AndroidRuntime(20166):    at android.app.ActivityThread.main(ActivityThread.java:4517)
08-07 16:24:44.300: E/AndroidRuntime(20166):    at java.lang.reflect.Method.invokeNative(Native Method)
08-07 16:24:44.300: E/AndroidRuntime(20166):    at java.lang.reflect.Method.invoke(Method.java:511)
08-07 16:24:44.300: E/AndroidRuntime(20166):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:993)
08-07 16:24:44.300: E/AndroidRuntime(20166):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:760)
08-07 16:24:44.300: E/AndroidRuntime(20166):    at dalvik.system.NativeStart.main(Native Method)

My search_dictionary_item_item.xml is

   <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:gravity="left|center"
    android:paddingBottom="5dp"
    android:paddingLeft="5dp"
    android:paddingTop="10dp" >

    <ImageView
        android:id="@+id/ImageView01"
        android:layout_width="50dp"
        android:layout_height="60dp" >
    </ImageView>

    <TextView
        android:id="@+id/TextView01"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="10dp"
        android:textColor="#0099CC"
        android:textSize="20dp"
        android:textStyle="bold" >
    </TextView>

    </LinearLayout>

my line 392 which is

at com.example.project.SearchDictionaryActivity$MyCustomAdapter.getView(SearchDictionaryActivity.java:392)

is

    TextView textview = (TextView) row.findViewById(R.id.TextView01);

i have tried 2 suggestion

1.

 public View getView(int position, View convertView, ViewGroup parent)
    {

          View row=convertView;
          Context c = null;

          if(convertView==null){
          LayoutInflater inflater = getLayoutInflater(null);
          row = inflater.inflate(R.layout.search_dictionary_item_item, parent, false);
         }

    TextView textview = (TextView) row.findViewById(R.id.TextView01);
    ImageView imageview = (ImageView) row.findViewById(R.id.ImageView01);

    textview.setText(data_text[position]);
    imageview.setImageBitmap(data_image[position]);

    return (row);

    }

for placing null getLayoutInflater(null); I get

The method getLayoutInflater() in the type Activity is not applicable for the arguments (null)

2.Sugesstion

    public View getView(int position, View convertView, ViewGroup parent)
    {

   // LayoutInflater inflater = getLayoutInflater();
    View row;
    LayoutInflater inflater = (LayoutInflater) convertView.getContext().getSystemService( Context.LAYOUT_INFLATER_SERVICE );

    row = inflater.inflate(R.layout.search_dictionary_item_item, parent, false);

    TextView textview = (TextView) row.findViewById(R.id.TextView01);
    ImageView imageview = (ImageView) row.findViewById(R.id.ImageView01);

    textview.setText(data_text[position]);
    imageview.setImageBitmap(data_image[position]);

    return (row);

    }

Both Doesnot work with Logcat given Above


回答1:


your convertView is never touched in suggestion #2

convertView = inflater.inflate(R.layout.search_dictionary_item_item, parent, false);

should fix it, you also need to return convertView instead of row




回答2:


change your getview method like this..

public View getView(int position, View convertView, ViewGroup parent) {

    if (convertView == null) {
        LayoutInflater inflater = (LayoutInflater) convertView.getContext()
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        convertView = inflater.inflate(
                R.layout.search_dictionary_item_item, null);

    }

    TextView textview = (TextView) convertView
            .findViewById(R.id.TextView01);
    ImageView imageview = (ImageView) convertView
            .findViewById(R.id.ImageView01);

    textview.setText(data_text[position]);
    imageview.setImageBitmap(data_image[position]);

    return convertView;

}



回答3:


I think you used a wrong layout instead your Correct row layout, I got the same error. when I verified the row layout was another one

e.g. instead of

convertView = inflater.inflate(R.layout.wrong_layout, parent, false);

use

convertView = inflater.inflate(R.layout.Correct_layout, parent, false);


来源:https://stackoverflow.com/questions/18102388/nullpointerexception-in-getview-of-adapter-extends-baseadapter

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!