Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/209.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 查找器函数不工作,基本适配器调用空指针_Java_Android_Android Studio_Listview - Fatal编程技术网

Java 查找器函数不工作,基本适配器调用空指针

Java 查找器函数不工作,基本适配器调用空指针,java,android,android-studio,listview,Java,Android,Android Studio,Listview,这个应用程序有一个用于输入的文本视图和一个调用Finder功能的按钮。查找器将在字符串数组中查找输入文本,然后在列表视图中显示它们。下面是这个场景的代码,语法正确,但在运行时,当我按下按钮时,应用程序崩溃。这里还引用了logcat结果 MainActivity.java package com.neatsoft.hamqafia; import android.content.Intent; import android.support.v7.app.AppCompatActivity; im

这个应用程序有一个用于输入的文本视图和一个调用Finder功能的按钮。查找器将在字符串数组中查找输入文本,然后在列表视图中显示它们。下面是这个场景的代码,语法正确,但在运行时,当我按下按钮时,应用程序崩溃。这里还引用了logcat结果

MainActivity.java

package com.neatsoft.hamqafia;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {
    EditText textBar;
    Button findBtn;
    ListView listView;
    BaseAdapter adapter;
    ArrayList<String> searchList;

   String words[] = {"Dust", "Duff", "Great", "Man", "Grade", "Mole", "Tax"};


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Init();
    }

    private void Init(){
        textBar = (EditText)   findViewById(R.id.editText);
        findBtn = (Button) findViewById(R.id.button);
        listView = (ListView) findViewById(R.id.listView);

    }

    public void Finder(View view){
        String toFind = textBar.getText().toString();



        if(searchList == null) {
            searchList = new ArrayList<String>();
        }
        searchList.clear();

        if(toFind != null || !toFind.trim().equals("")) {
            for(String str : words) {
                if(str.toLowerCase().contains(toFind.toLowerCase()))
                    searchList.add(str);
            }
        }

        notifyDataToListView();

    }

    private void notifyDataToListView() {
        if(adapter == null) {
            adapter = new BaseAdapter() {
                @Override
                public int getCount() {
                    return searchList == null ? 0 : searchList.size();
                }

                @Override
                public Object getItem(int position) {
                    return null;
                }

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

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

                    if(convertView == null) {
                        convertView = new TextView(getApplicationContext());
                    }
                    ((TextView) convertView).setText(searchList.get(position));
                    return null;
                }
            };
            listView.setAdapter(adapter);
        }else {
            adapter.notifyDataSetChanged();
        }
    }


}
适配器的
getView()
正在返回
null

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

    if(convertView == null) {
        convertView = new TextView(getApplicationContext());
    }
    ((TextView) convertView).setText(searchList.get(position));
    return null; // <<<<<< PROBLEM IS HERE
}

甚至其他方法
getItem()
getItemId()
也没有正确定义。我建议您阅读这些方法以及如何覆盖它们

在那之前,这些方法都是

@Override
public Object getItem(int position) {
    if (searchList == null || searchList.isEmpty()) {
        return null;
    } else {
        return searchList.get(position);
    }
}

@Override
public long getItemId(int position) {
    return position; // Better is to return id field of data if you have
}


由于你们是新来的,我想补充一点,答案也有同样的问题,比如。所以在将来,首先尝试搜索,从已经回答的问题中学习

更改
返回null
返回转换视图谢谢。它起作用了。。。但搜索结果并不正确。我想在这里搜索Regex后缀。比如,如果我输入“st”,它应该显示所有最后包含“st”的单词,比如爆炸、快速、灰尘、地壳、大多数。。。如何修改这个正则表达式的finder函数?@SurrayaMarvi现在显示什么?如果我输入“a”,它会显示所有包含字母“a”的单词。@SurrayaMarvi使用
if(str.toLowerCase().endsWith(toFind.toLowerCase())
。将
包含的
替换为
endsWith
是的,这很有帮助。谢谢
@Override
public View getView(int position, View convertView, ViewGroup parent) {

    if(convertView == null) {
        convertView = new TextView(getApplicationContext());
    }
    ((TextView) convertView).setText(searchList.get(position));
    return convertView;
}
@Override
public Object getItem(int position) {
    if (searchList == null || searchList.isEmpty()) {
        return null;
    } else {
        return searchList.get(position);
    }
}

@Override
public long getItemId(int position) {
    return position; // Better is to return id field of data if you have
}