Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/192.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
Android筛选器listview试图在空对象引用上调用接口方法“int java.util.List.size()”_Java_Android_Listview_Nullpointerexception_Searchview - Fatal编程技术网

Android筛选器listview试图在空对象引用上调用接口方法“int java.util.List.size()”

Android筛选器listview试图在空对象引用上调用接口方法“int java.util.List.size()”,java,android,listview,nullpointerexception,searchview,Java,Android,Listview,Nullpointerexception,Searchview,我的目标是通过一项研究来过滤列表视图,就像Whatsapp一样,当你在寻找一个有他的名字的朋友时。 当我尝试在搜索框中写入时出错,该搜索框仅在按下搜索图标时出现 这是我的错误: Process: org.testing.an_app, PID: 15386 java.lang.NullPointerException: Attempt to invoke interface method 'int java.util.List.size()' on a null object refer

我的目标是通过一项研究来过滤列表视图,就像Whatsapp一样,当你在寻找一个有他的名字的朋友时。 当我尝试在搜索框中写入时出错,该搜索框仅在按下搜索图标时出现

这是我的错误:

Process: org.testing.an_app, PID: 15386
    java.lang.NullPointerException: Attempt to invoke interface method 'int java.util.List.size()' on a null object reference
            at android.widget.SimpleAdapter.getCount(SimpleAdapter.java:93)
            at android.widget.AdapterView.checkFocus(AdapterView.java:717)
            at android.widget.AdapterView$AdapterDataSetObserver.onInvalidated(AdapterView.java:840)
            at android.widget.AbsListView$AdapterDataSetObserver.onInvalidated(AbsListView.java:6137)
            at android.database.DataSetObservable.notifyInvalidated(DataSetObservable.java:50)
            at android.widget.BaseAdapter.notifyDataSetInvalidated(BaseAdapter.java:59)
            at android.widget.SimpleAdapter$SimpleFilter.publishResults(SimpleAdapter.java:383)
            at android.widget.Filter$ResultsHandler.handleMessage(Filter.java:282)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:135)
            at android.app.ActivityThread.main(ActivityThread.java:5254)
            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:898)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:693)
这是我创建带有自定义项的listview的代码:

import android.app.ActionBar;
import android.app.Activity;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.text.TextUtils;
import android.util.Log;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.SearchView;
import android.widget.SimpleAdapter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Random;

public class Friends_List_Screen extends Activity {


    private SearchView mSearchView;
    private ListView ListView;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_friends_list);

        ListView = (ListView) findViewById(R.id.Friends);

        Create_List();

        ListView.setTextFilterEnabled(true);

    }
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {

        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.friend_list_screen_menu, menu);

        mSearchView = (SearchView) menu.findItem(R.id.search).getActionView();

        if (Integer.valueOf(android.os.Build.VERSION.SDK) > 7) {
            mSearchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
                @Override
                public boolean onQueryTextSubmit(String s) {
                    return false;
                }
                @Override
                public boolean onQueryTextChange(String s) {
                    ListView = (ListView) findViewById(R.id.Friends);
                    SimpleAdapter adapter = (SimpleAdapter) ListView.getAdapter();
                    if (TextUtils.isEmpty(s)) {
                        adapter.getFilter().filter("");
                    } else {
                        adapter.getFilter().filter(s.toString().toLowerCase());
                    }
                    return true;
                }
            });
        }

        final MenuItem searchMI = (MenuItem) menu.findItem(R.id.search);

        mSearchView.setOnQueryTextFocusChangeListener(new View.OnFocusChangeListener() {
            @Override
            public void onFocusChange(View view, boolean queryTextFocused) {
                if (!queryTextFocused) {
                    searchMI.collapseActionView();
                }
            }
        });
        return true;
    }
    private void Create_List(){
        ArrayList<Friend_OBJ> Friend_OBJList=new ArrayList<Friend_OBJ>();

        Friend_OBJ [] people={
                new Friend_OBJ("X","B",R.drawable.profile_icon),
                new Friend_OBJ("Y", "Q", R.drawable.profile_icon),
                new Friend_OBJ("Z","D",R.drawable.profile_icon),
                new Friend_OBJ("W","X",R.drawable.profile_icon)};

        Random r=new Random();
        for(int i=0;i<100;i++){
            Friend_OBJList.add(people[r.nextInt(people.length)]);
        }
        ArrayList<HashMap<String, Object>> data=new ArrayList<HashMap<String,Object>>();

        for(int i=0;i<Friend_OBJList.size();i++){
            Friend_OBJ p=Friend_OBJList.get(i);

            HashMap<String,Object> Friend_OBJMap=new HashMap<String, Object>();

            Friend_OBJMap.put("image", p.getPhotoRes());
            Friend_OBJMap.put("name", p.getName());
            Friend_OBJMap.put("surname", p.getSurname());
            data.add(Friend_OBJMap);
        }

        String[] from={"image","name","surname"};
        int[] to={R.id.personImage,R.id.personName,R.id.personSurname};

        SimpleAdapter adapter=new SimpleAdapter(
                getApplicationContext(),
                data,
                R.layout.friends_list_item,
                from,
                to);
        ListView.setAdapter(adapter);
    }
}
请看错误:

java.lang.NullPointerException...
            at android.widget.SimpleAdapter.getCount(SimpleAdapter.java:93)
特别是:

at android.widget.SimpleAdapter.getCount(SimpleAdapter.java:93)

您的错误在simpledapter.java的第93行。你得看看那里。

也许你没有为ListView设置适配器


顺便说一句,为什么要用与其类类型相同的名称命名变量?ListView ListView

尝试在adatper中更改此选项:

public int getCount() {
if(filteredListData==null){
Log.v("LOG","Warning, null filteredListData");
return 0;
}else{
return filteredListData.size();
}
}

第93行没有错误。第93行是一个空行,并且在方法Create_列表中,如果我对整个部分进行注释以搜索代码,SimpleAdapter的第93行是否有效?创建列表在朋友列表屏幕的第93行。SimpleAdapter代码不在您的问题中。对不起,这是我的错,我错过了阅读。您所说的错误在SimpleAdapter中,SimpleAdapter不是我的,但它是一个标准适配器,我不知道如何修复我的Create_List方法中的itI set adapter是的,但在OnCreateOptions菜单方法中,您使用findViewById设置ListView,它会用适配器覆盖该适配器,因此,据我所知,它没有适配器,您可以稍后尝试获取一行。没关系,我可以使用我喜欢的名称。如果我用另一种方式命名,任何东西都会改变。ListView不会在OnCreateOptions菜单中被覆盖,如果我删除这一行,它不会解决问题