Android 尝试对空对象引用调用虚方法-抽屉布局

Android 尝试对空对象引用调用虚方法-抽屉布局,android,navigation-drawer,Android,Navigation Drawer,我正在创建一个扩展ActionBarActivity的父活动,我的所有活动都将扩展该活动(因此我只需执行一次抽屉设置) 我一直在抽屉列表的setAdapter方法上遇到一个空指针异常,我不知道为什么 以下是家长活动: (崩溃日志显示它是导致此活动的原因,我在该行末尾添加了一条注释) 以下是抽屉列表的适配器: import android.content.Context; import android.view.LayoutInflater; import android.view.View; i

我正在创建一个扩展ActionBarActivity的父活动,我的所有活动都将扩展该活动(因此我只需执行一次抽屉设置)

我一直在抽屉列表的setAdapter方法上遇到一个空指针异常,我不知道为什么

以下是家长活动: (崩溃日志显示它是导致此活动的原因,我在该行末尾添加了一条注释)

以下是抽屉列表的适配器:

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

public class DrawerAdapter extends BaseAdapter {

    private Context context;
    private String[] items;

    public DrawerAdapter(Context context) {
        this.context = context;
        items = context.getResources().getStringArray(R.array.drawer_array);
    }

    @Override
    public int getCount() {
        return items.length;
    }

    @Override
    public String getItem(int position) {
        return items[position];
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder holder;
        if (convertView == null) {
            holder = new ViewHolder();
            LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            convertView = inflater.inflate(R.layout.drawer_list_item, parent, false);

            holder.image = (ImageView) convertView.findViewById(R.id.drawerItemImage);
            holder.text = (TextView) convertView.findViewById(R.id.drawerItemText);

            convertView.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }
        holder.image.setImageResource(getIcon(position));
        holder.text.setText(getItem(position));

        return convertView;
    }

    private int getIcon(int position) {
        switch (position) {
            case 0:
                return R.drawable.ic_action_home_blue;
            case 1:
                return R.drawable.ic_action_heart_blue;
            case 2:
                return R.drawable.ic_action_search_blue;
            case 3:
                return R.drawable.ic_action_map_blue;
            case 4:
                return R.drawable.ic_action_wheel_blue;
            case 5:
                return R.drawable.ic_action_calendar_blue;
            case 6:
                return R.drawable.ic_action_parameters_blue;
        }

        return 0;
    }

    class ViewHolder {
        private ImageView image;
        private TextView text;
    }
}
为了以防万一,这里是布局文件:

<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/drawer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="?attr/color">
    <!-- The main content view -->

    <LinearLayout
        android:id="@+id/baseLayoutRootParent"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

        <android.support.v7.widget.Toolbar xmlns:bar="http://schemas.android.com/apk/res-auto"
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            android:background="?attr/colorPrimary"
            android:gravity="end|center_vertical"
            android:paddingEnd="@dimen/activity_horizontal_margin"
            android:paddingLeft="@dimen/activity_horizontal_margin"
            android:paddingRight="@dimen/activity_horizontal_margin"
            android:paddingStart="@dimen/activity_horizontal_margin"
            bar:theme="@style/ThemeOverlay.AppCompat.ActionBar" />

        <FrameLayout
            android:id="@+id/mainContainer"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />
    </LinearLayout>
    <!-- The drawer content view -->

    <ListView
        android:id="@+id/left_drawer"
        android:layout_width="250dp"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        android:background="?attr/background"
        android:choiceMode="singleChoice"
        android:divider="@android:color/transparent"
        android:dividerHeight="0dp" />
</android.support.v4.widget.DrawerLayout>
提前谢谢

编辑


我曾尝试从onCreate、onPostCreate和onResume调用setupActivity(),但在所有3个版本中都出现了相同的错误,因此,我也出现了这个奇怪的错误,但我的错误日志没有指向我的应用程序中的任何代码行,所以这只是一个猜测游戏。 它是:

我的崩溃源于我没有结果,所以我最终决定使用空视图

Cursor results = performQuery();
if(results != null && results.getCount() > 0){
    listView.setVisibility(View.VISIBLE);
    emptyView.setVisibility(View.GONE);
    adapter.changeCursor(results);
    listView.scrollToPosition(0);
}
else{
    emptyView.setVisibility(View.VISIBLE);
    listView.setVisibility(View.GONE);
}

这修复了我的崩溃。请注意,我正在使用您发布的
MainActivity中新的
RecyclerView

。这是空指针。可能在您从
onCreate
返回后尝试调用。我尝试过从onCreate、onPostCreate和onResume调用setupActivity(),但在这三个过程中都出现了相同的错误。我已将此信息添加到操作系统中,为什么不分解错误行并检查
MainActivity。此
显式为空?它必须为空。现在的Java/Android不是正在从继承走向组合吗?只是调试和MainActivity。这不是空的,那么问题不在你说的地方
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/drawer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="?attr/color">
    <!-- The main content view -->

    <LinearLayout
        android:id="@+id/baseLayoutRootParent"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

        <android.support.v7.widget.Toolbar xmlns:bar="http://schemas.android.com/apk/res-auto"
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            android:background="?attr/colorPrimary"
            android:gravity="end|center_vertical"
            android:paddingEnd="@dimen/activity_horizontal_margin"
            android:paddingLeft="@dimen/activity_horizontal_margin"
            android:paddingRight="@dimen/activity_horizontal_margin"
            android:paddingStart="@dimen/activity_horizontal_margin"
            bar:theme="@style/ThemeOverlay.AppCompat.ActionBar" />

        <FrameLayout
            android:id="@+id/mainContainer"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />
    </LinearLayout>
    <!-- The drawer content view -->

    <ListView
        android:id="@+id/left_drawer"
        android:layout_width="250dp"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        android:background="?attr/background"
        android:choiceMode="singleChoice"
        android:divider="@android:color/transparent"
        android:dividerHeight="0dp" />
</android.support.v4.widget.DrawerLayout>
02-27 13:05:55.205  11723-11723/com.example.myApp.app E/AndroidRuntime﹕ FATAL EXCEPTION: main
    Process: com.example.myApp.app, PID: 11723
    java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.ViewGroup$LayoutParams android.view.View.getLayoutParams()' on a null object reference
            at android.widget.ListView.clearRecycledState(ListView.java:539)
            at android.widget.ListView.resetList(ListView.java:525)
            at android.widget.ListView.setAdapter(ListView.java:469)
            at com.example.myApp.app.MainActivity$1.run(MainActivity.java:92)
            at android.os.Handler.handleCallback(Handler.java:739)
            at android.os.Handler.dispatchMessage(Handler.java:95)
            at android.os.Looper.loop(Looper.java:155)
            at android.app.ActivityThread.main(ActivityThread.java:5696)
            at java.lang.reflect.Method.invoke(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:372)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1028)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:823)
listView.scrollToPosition(0);
Cursor results = performQuery();
if(results != null){
    adapter.changeCursor(results);
}
Cursor results = performQuery();
if(results != null && results.getCount() > 0){
    listView.setVisibility(View.VISIBLE);
    emptyView.setVisibility(View.GONE);
    adapter.changeCursor(results);
    listView.scrollToPosition(0);
}
else{
    emptyView.setVisibility(View.VISIBLE);
    listView.setVisibility(View.GONE);
}