【问题标题】:Recycler view NullPointerException in abstract class [duplicate]抽象类中的回收器视图 NullPointerException [重复]
【发布时间】:2015-02-14 11:51:08
【问题描述】:

我正在从事一个项目,该项目有许多活动,这些活动以确切的方式使用回收站视图,只是数据和 onClickListener 发生变化, 我有以下抽象类,用于使用不同的 onClickListener 创建不同的活动

public abstract class AbstractActivity extends ActionBarActivity implements View.OnClickListener{
    private final String[] data;
    RecyclerView.LayoutManager layoutManager;
    RecyclerView.Adapter adapter;
    List<String> list;
    Toolbar toolbar;
    String title;
    int id;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.recycler);
        Toolbar toolbar=(Toolbar)this.findViewById(R.id.toolbar);
        toolbar.setLogo(R.drawable.ic_launcher);
        toolbar.setTitle(title);
        RecyclerView recyclerView=(RecyclerView)this.findViewById(R.id.recycler_view);
        recyclerView.setItemAnimator(new DefaultItemAnimator());
        recyclerView.addItemDecoration(new DividerItemDecoration(this, null));
        recyclerView.setHasFixedSize(true);
        RecyclerView.LayoutManager layoutManager=new LinearLayoutManager(this);
        recyclerView.setLayoutManager(layoutManager);
        list.add("Hello");
        adapter=new CardAdapter(list,id,this);
        recyclerView.setAdapter(adapter);
    }
    public AbstractActivity(String title,String[] data,int id){
     this.title=title;
     this.data=data;
     this.id=id;
    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_abstract, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }

    @Override
    public abstract void onClick(View v);
    }
}

回收站布局文件是

<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:orientation="vertical"
    tools:context=".Syllabus">

    <android.support.v7.widget.Toolbar android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:minHeight="@dimen/abc_action_bar_default_height_material"
        android:id="@+id/toolbar"
        android:background="#03a9f4"
        >
    </android.support.v7.widget.Toolbar>

    <android.support.v7.widget.RecyclerView
        android:id="@+id/recycler_view"
        android:scrollbars="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
</LinearLayout>

现在,当我使用抽象类扩展某个类以创建活动时,我得到 nullPointerException。扩展类是

public class Batch extends AbstractActivity {
     public Batch(){
          super("Hello",new String[]{"B.E Syllabus","B.Arch Syllabus","MBA Syllabus","MCA Syllabus","M.Tech Syllabus"},R.layout.main_page);
      }


    @Override
    public void onClick(View v) {


    }
}

logcat 条目是

          

02-14 17:07:03.233    2807-2807/android.anoop.com.vtustudent E/AndroidRuntime﹕ FATAL EXCEPTION: main
java.lang.RuntimeException: Unable to start activity ComponentInfo{android.anoop.com.vtustudent/android.anoop.com.vtustudent.Batch}: java.lang.NullPointerException
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2070)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2095)
        at android.app.ActivityThread.access$600(ActivityThread.java:135)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1201)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:137)
        at android.app.ActivityThread.main(ActivityThread.java:4849)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:511)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:795)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:562)
        at dalvik.system.NativeStart.main(Native Method)
 Caused by: java.lang.NullPointerException
        at android.anoop.com.vtustudent.AbstractActivity.onCreate(AbstractActivity.java:37)
        at android.app.Activity.performCreate(Activity.java:5236)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1082)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2034)


android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2095)
        at android.app.ActivityThread.access$600(ActivityThread.java:135)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1201)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:137)
        at android.app.ActivityThread.main(ActivityThread.java:4849)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:511)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:795)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:562)
        at dalvik.system.NativeStart.main(Native Method)

如果我从布局文件中删除 recyclerView,recycler 文件中的工具栏扩展正常,应用程序运行完美。此外,如果我直接在某些活动中使用相同的资源文件,它工作正常。我只在我收到错误时使用抽象类中的布局资源文件。 为什么会发生这种情况以及如何纠正这种情况。抽象类的方式也是正确的方式,或者是否有其他方式来创建相同类型的活动。我是 android 编程新手,任何帮助将不胜感激。谢谢

【问题讨论】:

    标签: java android abstract-class android-recyclerview


    【解决方案1】:

    list 永远不会被初始化。所以list.add("Hello"); 会抛出一个 NPE。

    只需更改:List&lt;String&gt; list;List&lt;String&gt; list = new ArrayList&lt;String&gt;();

    【讨论】:

      猜你喜欢
      • 2018-07-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-24
      • 2018-12-02
      相关资源
      最近更新 更多