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