Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
实现搜索栏和获取';java.lang.Object[]java.util.Collection.toArray()';关于空对象引用错误_Java_Android_Android Studio - Fatal编程技术网

实现搜索栏和获取';java.lang.Object[]java.util.Collection.toArray()';关于空对象引用错误

实现搜索栏和获取';java.lang.Object[]java.util.Collection.toArray()';关于空对象引用错误,java,android,android-studio,Java,Android,Android Studio,我是android studio的新手,我一直在尝试在我的应用程序上实现一个搜索栏,但我遇到了一个构建错误。安装没问题,但当我尝试在手机上打开应用程序时,会显示“应用程序已停止” Logcat(错误): E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.sliteproj, PID: 1445 java.lang.RuntimeException: Unable to start activity ComponentInfo

我是android studio的新手,我一直在尝试在我的应用程序上实现一个搜索栏,但我遇到了一个构建错误。安装没问题,但当我尝试在手机上打开应用程序时,会显示“应用程序已停止”

Logcat(错误):

E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.sliteproj, PID: 1445
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.sliteproj/com.example.sliteproj.MainActivity}: java.lang.NullPointerException: Attempt to invoke interface method 'java.lang.Object[] java.util.Collection.toArray()' on a null object reference
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2957)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3032)
    at android.app.ActivityThread.-wrap11(Unknown Source:0)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1696)
    at android.os.Handler.dispatchMessage(Handler.java:105)
    at android.os.Looper.loop(Looper.java:164)
    at android.app.ActivityThread.main(ActivityThread.java:6944)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)
 Caused by: java.lang.NullPointerException: Attempt to invoke interface method 'java.lang.Object[] java.util.Collection.toArray()' on a null object reference
    at java.util.ArrayList.<init>(ArrayList.java:191)
    at com.example.sliteproj.Adapter.<init>(Adapter.java:34)
    at com.example.sliteproj.MainActivity.showRecord(MainActivity.java:57)
    at com.example.sliteproj.MainActivity.onCreate(MainActivity.java:41)
    at android.app.Activity.performCreate(Activity.java:7183)
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1220)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2910)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3032) 
    at android.app.ActivityThread.-wrap11(Unknown Source:0) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1696) 
    at android.os.Handler.dispatchMessage(Handler.java:105) 
    at android.os.Looper.loop(Looper.java:164) 
    at android.app.ActivityThread.main(ActivityThread.java:6944) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374) 
public class Adapter extends RecyclerView.Adapter<Adapter.Holder> implements 
Filterable {
private Context context;
private ArrayList<Model> arrayList;
private ArrayList<Model> exampleArrayList;

DatabaseHelper databaseHelper;

public Adapter(Context context, ArrayList<Model> arrayList) {
    this.context = context;
    this.arrayList = arrayList;
    exampleArrayList = new ArrayList<>(exampleArrayList);

    databaseHelper = new DatabaseHelper(context);
}

@Override
public Filter getFilter() {
    return exampleFilter;
}

private Filter exampleFilter = new Filter() {
    @Override
    protected FilterResults performFiltering(CharSequence constraint) {
        List<Model> filteredList = new ArrayList<>();

        if (constraint == null || constraint.length() == 0) {
            filteredList.addAll(exampleArrayList);
        } else {
            String filterPattern = constraint.toString().toLowerCase().trim();

            for (Model item: exampleArrayList) {
                if (item.getName().toLowerCase().contains(filterPattern)) {
                    filteredList.add(item);
                }
            }
        }

        FilterResults results = new FilterResults();
        results.values = filteredList;

        return results;
    }

    @Override
    protected void publishResults(CharSequence constraint, FilterResults results) {
        arrayList.clear();
        arrayList.addAll((List) results.values);
        notifyDataSetChanged();
    }
};
}
E/AndroidRuntime:致命异常:主
流程:com.example.sliteproj,PID:1445
java.lang.RuntimeException:无法启动activity ComponentInfo{com.example.sliteproj/com.example.sliteproj.MainActivity}:java.lang.NullPointerException:尝试对空对象引用调用接口方法“java.lang.Object[]java.util.Collection.toArray()”
在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2957)上
位于android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3032)
位于android.app.ActivityThread.-wrap11(未知来源:0)
在android.app.ActivityThread$H.handleMessage(ActivityThread.java:1696)
位于android.os.Handler.dispatchMessage(Handler.java:105)
位于android.os.Looper.loop(Looper.java:164)
位于android.app.ActivityThread.main(ActivityThread.java:6944)
位于java.lang.reflect.Method.invoke(本机方法)
在com.android.internal.os.Zygote$MethodAndArgsCaller.run上(Zygote.java:327)
位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)
原因:java.lang.NullPointerException:尝试对空对象引用调用接口方法“java.lang.Object[]java.util.Collection.toArray()”
位于java.util.ArrayList。(ArrayList.java:191)
位于com.example.sliteproj.Adapter。(Adapter.java:34)
位于com.example.sliteproj.MainActivity.showRecord(MainActivity.java:57)
位于com.example.sliteproj.MainActivity.onCreate(MainActivity.java:41)
位于android.app.Activity.performCreate(Activity.java:7183)
位于android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1220)
在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2910)上
位于android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3032)
位于android.app.ActivityThread.-wrap11(未知来源:0)
在android.app.ActivityThread$H.handleMessage(ActivityThread.java:1696)
位于android.os.Handler.dispatchMessage(Handler.java:105)
位于android.os.Looper.loop(Looper.java:164)
位于android.app.ActivityThread.main(ActivityThread.java:6944)
位于java.lang.reflect.Method.invoke(本机方法)
在com.android.internal.os.Zygote$MethodAndArgsCaller.run上(Zygote.java:327)
位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)
我知道这是一个常见的问题,我已经看过了其他的答案和解决方案。我已尝试初始化列表,但仍然无法修复错误。我想我在理解确切需要初始化的位置时遇到了问题

我的代码(Adapter.java):

E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.sliteproj, PID: 1445
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.sliteproj/com.example.sliteproj.MainActivity}: java.lang.NullPointerException: Attempt to invoke interface method 'java.lang.Object[] java.util.Collection.toArray()' on a null object reference
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2957)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3032)
    at android.app.ActivityThread.-wrap11(Unknown Source:0)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1696)
    at android.os.Handler.dispatchMessage(Handler.java:105)
    at android.os.Looper.loop(Looper.java:164)
    at android.app.ActivityThread.main(ActivityThread.java:6944)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)
 Caused by: java.lang.NullPointerException: Attempt to invoke interface method 'java.lang.Object[] java.util.Collection.toArray()' on a null object reference
    at java.util.ArrayList.<init>(ArrayList.java:191)
    at com.example.sliteproj.Adapter.<init>(Adapter.java:34)
    at com.example.sliteproj.MainActivity.showRecord(MainActivity.java:57)
    at com.example.sliteproj.MainActivity.onCreate(MainActivity.java:41)
    at android.app.Activity.performCreate(Activity.java:7183)
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1220)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2910)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3032) 
    at android.app.ActivityThread.-wrap11(Unknown Source:0) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1696) 
    at android.os.Handler.dispatchMessage(Handler.java:105) 
    at android.os.Looper.loop(Looper.java:164) 
    at android.app.ActivityThread.main(ActivityThread.java:6944) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374) 
public class Adapter extends RecyclerView.Adapter<Adapter.Holder> implements 
Filterable {
private Context context;
private ArrayList<Model> arrayList;
private ArrayList<Model> exampleArrayList;

DatabaseHelper databaseHelper;

public Adapter(Context context, ArrayList<Model> arrayList) {
    this.context = context;
    this.arrayList = arrayList;
    exampleArrayList = new ArrayList<>(exampleArrayList);

    databaseHelper = new DatabaseHelper(context);
}

@Override
public Filter getFilter() {
    return exampleFilter;
}

private Filter exampleFilter = new Filter() {
    @Override
    protected FilterResults performFiltering(CharSequence constraint) {
        List<Model> filteredList = new ArrayList<>();

        if (constraint == null || constraint.length() == 0) {
            filteredList.addAll(exampleArrayList);
        } else {
            String filterPattern = constraint.toString().toLowerCase().trim();

            for (Model item: exampleArrayList) {
                if (item.getName().toLowerCase().contains(filterPattern)) {
                    filteredList.add(item);
                }
            }
        }

        FilterResults results = new FilterResults();
        results.values = filteredList;

        return results;
    }

    @Override
    protected void publishResults(CharSequence constraint, FilterResults results) {
        arrayList.clear();
        arrayList.addAll((List) results.values);
        notifyDataSetChanged();
    }
};
}
公共类适配器扩展了RecyclerView。适配器实现
可过滤{
私人语境;
私有ArrayList ArrayList;
私有ArrayList示例ArrayList;
数据库助手数据库助手;
公共适配器(上下文上下文,ArrayList ArrayList){
this.context=上下文;
this.arrayList=arrayList;

exampleArrayList=新建ArrayList(exampleArrayList); databaseHelper=新的databaseHelper(上下文); } @凌驾 公共过滤器getFilter(){ 返回示例过滤器; } 私有筛选器exampleFilter=新筛选器(){ @凌驾 受保护的筛选器结果性能筛选(CharSequence约束){ List filteredList=新建ArrayList(); if(constraint==null | | constraint.length()==0){ filteredList.addAll(例如ArrayList); }否则{ String filterPattern=constraint.toString().toLowerCase().trim(); 对于(模型项:exampleArrayList){ if(item.getName().toLowerCase().contains(filterPattern)){ filteredList.add(项目); } } } FilterResults results=新的FilterResults(); results.values=filteredList; 返回结果; } @凌驾 受保护的void publishResults(CharSequence约束、FilterResults结果){ arrayList.clear(); addAll((列表)results.values); notifyDataSetChanged(); } }; }
原因:java.lang.NullPointerException:尝试在空对象引用上调用接口方法“java.lang.Object[]java.util.Collection.toArray()”

private void showRecord() {

    adapter = new Adapter(MainActivity.this,
            databaseHelper.getAllData(Constants.C_TAG + " DESC"));

    mRecyclerView.setAdapter(adapter);
}
第一行声明了一个名为
exampleArrayList
的变量,但它实际上还没有包含原语值。相反,它包含一个指针(因为类型是引用类型
ArrayList
)。由于您还没有说要指向什么,Java将其设置为null,这意味着“我没有指向任何东西”


第二个异常bcz是全局声明的适配器对象,但您正在本地以showRecord方法创建适配器对象,这就是为什么globall适配器对象为null,并且您正在访问全局对象,并且您得到异常

exampleArrayList=new ArrayList(exampleArrayList);此语句中出现错误,您正在从null创建arraylist。替换为exampleArrayList=newArrayList()<代码>exampleArrayList=新建ArrayList(exampleArrayList)–这就是问题所在。您的参数名为
arrayList
,因此,如果您确实需要该
arrayList
的单独副本,那么它应该是
exampleAraylist=newArraylist(arrayList)。否则,您只需执行
exampleArrayList=arrayList。这已经修复了它以及如何打开,但当我按下搜索栏时,它会关闭应用程序。现在,我有一个错误,上面写着“java.lang.NullPointerException:尝试调用上的虚拟方法'android.widget.Filter com.example.sliteproj.Adapter.getFilter()