Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/194.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 与ArrayList结合时的searchableListView_Java_Android_Arraylist - Fatal编程技术网

Java 与ArrayList结合时的searchableListView

Java 与ArrayList结合时的searchableListView,java,android,arraylist,Java,Android,Arraylist,我正在尝试创建一个可搜索的列表视图。最初,它在硬编码阵列中工作得很好。但当我使用ArrayList并用json填充它时,它现在不会显示任何搜索结果。它现在正在正确加载列表,但搜索不起作用。 这是我的密码 public class MainActivity extends AppCompatActivity { public ProgressDialog pd; Toolbar mToolbar; ArrayAdapter mAdapter; ListView mListView; TextVi

我正在尝试创建一个可搜索的列表视图。最初,它在硬编码阵列中工作得很好。但当我使用ArrayList并用json填充它时,它现在不会显示任何搜索结果。它现在正在正确加载列表,但搜索不起作用。 这是我的密码

public class MainActivity extends AppCompatActivity {

public ProgressDialog pd;
Toolbar mToolbar;
ArrayAdapter mAdapter;
ListView mListView;
TextView mEmptyView;
PatientListAdapter adapter = null;
String clinic_id, response;
public BufferedReader reader = null;
public ArrayList<PatientListDetails> patientListDetailsList;
private String url = "http://192.168.2.4/projectFolder1/FetchData/getDataList.php?";


    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    setTitle("View Project List");

    pd = new ProgressDialog(this);
    pd.setIndeterminate(true);
    pd.setCancelable(false);
    pd.setTitle("Niramaya");
    pd.setMessage("Fetching patient list. Please wait....");


    mToolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(mToolbar);

    mListView = (ListView) findViewById(R.id.list);
    mEmptyView = (TextView) findViewById(R.id.emptyView);

    new GetPatientListTask().execute(url+"cid=1");


//        mAdapter = new ArrayAdapter(MainActivity.this,
//                android.R.layout.simple_list_item_1,
//                   getResources().getStringArray(R.array.months_array));
//        mListView.setAdapter(mAdapter);
//
//        mListView.setOnItemClickListener(new  AdapterView.OnItemClickListener() {
//            @Override
//            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
//                Toast.makeText(MainActivity.this, adapterView.getItemAtPosition(i).toString(), Toast.LENGTH_SHORT).show();
//            }

//        });

//

//        mListView.setEmptyView(mEmptyView);
}

private class GetPatientListTask extends AsyncTask<String,String,List<PatientListDetails>> {

    List<PatientListDetails> patientDetailsList = new ArrayList<>();
    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        pd.show();
    }

    @Override
    protected List<PatientListDetails> doInBackground(String... strings) {
        HttpURLConnection connection;

        StringBuffer buffer = null;
        JSONObject jsonObject;
        JSONArray jsonArray;

        try{

            URL url = new URL(strings[0]);
            connection = (HttpURLConnection) url.openConnection();
            connection.connect();
            InputStream stream = connection.getInputStream();

            reader = new BufferedReader(new 
InputStreamReader(stream));

            buffer = new StringBuffer();
            String line = "";

            while((line=reader.readLine())!=null){
                buffer.append(line);
            }


            jsonArray = new JSONArray(buffer.toString());


            for(int i=0; i<jsonArray.length(); i++){
                jsonObject = jsonArray.getJSONObject(i);
                response = jsonObject.getString("status");

                if(response.equals("0")){
                    PatientListDetails patientListDetails = new PatientListDetails();


patientListDetails.setStatus(jsonObject.getString("status"));

patientListDetails.setPatient_id(jsonObject.getString("patient_id"));

patientListDetails.setFull_name(jsonObject.getString("full_name"));

patientListDetails.setGender(jsonObject.getString("gender"));


//Log.e("name",jsonObject.getString("full_name"));
                    patientDetailsList.add(patientListDetails);
                }

            }

        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (JSONException e) {
            e.printStackTrace();
        }
        return patientDetailsList;

    }

    @Override
    protected void onPostExecute(List<PatientListDetails> s) {
        super.onPostExecute(s);
        pd.dismiss();
         adapter = new 
PatientListAdapter(getApplicationContext(),R.layout.patient_list,s);
        mListView.setAdapter(adapter);
    }


}

class MyViewHolder{
    TextView tvFull_name,tvGender,btn;
    EditText pid;
    MyViewHolder(View v){
        tvFull_name = (TextView)v.findViewById(R.id.patient_name);
        tvGender = (TextView)v.findViewById(R.id.patient_gender);
        pid = (EditText) v.findViewById(R.id.patient_id);
        btn = (TextView) v.findViewById(R.id.btn_view);

    }
}

public class PatientListAdapter extends ArrayAdapter implements 
Filterable{


    int resource;
    private LayoutInflater inflater;

    public PatientListAdapter(@NonNull Context context, int resource, 
@NonNull List<PatientListDetails> objects) {
        super(context, resource, objects);
        patientListDetailsList= (ArrayList<PatientListDetails>) 
objects;
        this.resource=resource;
        inflater=(LayoutInflater)getSystemService(LAYOUT_INFLATER_SERVICE);
    }

    @NonNull
    @Override
    public Filter getFilter() {
        return new Filter() {
            @Override
            protected FilterResults performFiltering(CharSequence constraint) {

                   return null;
            }

            @Override
            protected void publishResults(CharSequence constraint, FilterResults results) {
                try {
                    patientListDetailsList = (ArrayList<PatientListDetails>) results.values;
                }catch (NullPointerException e){
                    Log.e("Error",e.toString());
                }
                notifyDataSetChanged();

            }
        };
    }

    @RequiresApi(api = Build.VERSION_CODES.O)
    @SuppressLint("InflateParams")
    @NonNull
    @Override
    public View getView(final int position, @Nullable View convertView, @NonNull ViewGroup parent) {
        //return super.getView(position, convertView, parent);


        MyViewHolder holder = null;
        if(convertView==null){
            convertView = inflater.inflate(R.layout.patient_list, null);
            holder = new MyViewHolder(convertView);
            convertView.setTag(holder);
        }


            if (holder != null) {


holder.tvFull_name.setText(patientListDetailsList.get(position).getFull_name());

            }

//                if (holder != null) {

//                    holder.tvGender.setText(patientListDetailsList.get(position).getGender());

//                }

//                final String pat_id = patientListDetailsList.get(position).getPatient_id();




//            if (holder != null) {

//                holder.btn.setOnClickListener(new View.OnClickListener() {

//                    @Override

//                    public void onClick(View v) {



//                    }

//                });

//            }

        return convertView;
    }
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.actionbarmenu, menu);

    MenuItem mSearch = menu.findItem(R.id.action_search);

    SearchManager searchManager = (SearchManager)getSystemService(Context.SEARCH_SERVICE);
    SearchView mSearchView = (SearchView) menu.findItem(R.id.action_search).getActionView();
    mSearchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
    mSearchView.setQueryHint("Search");

    mSearchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
        @Override
        public boolean onQueryTextSubmit(String query) {
            return false;
        }

        @Override
        public boolean onQueryTextChange(String newText) {

            adapter.getFilter().filter(newText);
            return true;
        }
    });

    return super.onCreateOptionsMenu(menu);
}


}
public类MainActivity扩展了AppCompatActivity{
公共发展对话;
工具栏工具栏;
ArrayAdapter mAdapter;
列表视图;
TextView mEmptyView;
PatientListAdapter适配器=空;
字符串clinic_id,响应;
public BufferedReader reader=null;
公共阵列列表patientListDetailsList;
专用字符串url=”http://192.168.2.4/projectFolder1/FetchData/getDataList.php?";
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
setTitle(“查看项目列表”);
pd=新进度对话框(本);
pd.SetUndeterminate(真);
pd.可设置可取消(假);
pd.setTitle(“Niramaya”);
pd.setMessage(“正在获取患者列表,请稍候…”);
mToolbar=(工具栏)findviewbyd(R.id.Toolbar);
设置支持操作栏(mToolbar);
mListView=(ListView)findViewById(R.id.list);
mEmptyView=(TextView)findViewById(R.id.emptyView);
新建GetPatientListTask().execute(url+“cid=1”);
//mAdapter=新阵列适配器(MainActivity.this,
//android.R.layout.simple\u list\u item\u 1,
//getResources().getStringArray(R.array.months_array));
//mListView.setAdapter(mAdapter);
//
//mListView.setOnItemClickListener(新的AdapterView.OnItemClickListener(){
//@覆盖
//公共无效onItemClick(AdapterView AdapterView、View视图、int i、long l){
//Toast.makeText(MainActivity.this,adapterView.getItemAtPosition(i).toString(),Toast.LENGTH_SHORT).show();
//            }
//        });
//
//mListView.setEmptyView(mEmptyView);
}
私有类GetPatientListTask扩展了AsyncTask{
List patientDetailsList=new ArrayList();
@凌驾
受保护的void onPreExecute(){
super.onPreExecute();
pd.show();
}
@凌驾
受保护列表doInBackground(字符串…字符串){
httpurl连接;
StringBuffer=null;
JSONObject JSONObject;
JSONArray JSONArray;
试一试{
URL=新URL(字符串[0]);
connection=(HttpURLConnection)url.openConnection();
connection.connect();
InputStream=connection.getInputStream();
读卡器=新的BufferedReader(新的
InputStreamReader(流));
buffer=新的StringBuffer();
字符串行=”;
而((line=reader.readLine())!=null){
buffer.append(行);
}
jsonArray=新的jsonArray(buffer.toString());

对于(int i=0;i如果您正在寻找基于文本匹配的过滤器,则可以使用以下代码-

@Override
        protected FilterResults performFiltering(CharSequence constraint) {

            String filterString = constraint.toString().toLowerCase();

            FilterResults results = new FilterResults();

            final List<String> list = originalData;

            int count = list.size();
            final ArrayList<String> nlist = new ArrayList<String>(count);

            String filterableString ;

            for (int i = 0; i < count; i++) {
                filterableString = list.get(i);
                if (filterableString.toLowerCase().contains(filterString)) {
                    nlist.add(filterableString);
                }
            }

            results.values = nlist;
            results.count = nlist.size();

            return results;
        }
@覆盖
受保护的筛选器结果性能筛选(CharSequence约束){
String filterString=constraint.toString().toLowerCase();
FilterResults results=新的FilterResults();
最终列表=原始数据;
int count=list.size();
最终ArrayList NLList=新ArrayList(计数);
串滤器串;
for(int i=0;i
如果要查找基于文本匹配的过滤器,可以使用以下代码-

@Override
        protected FilterResults performFiltering(CharSequence constraint) {

            String filterString = constraint.toString().toLowerCase();

            FilterResults results = new FilterResults();

            final List<String> list = originalData;

            int count = list.size();
            final ArrayList<String> nlist = new ArrayList<String>(count);

            String filterableString ;

            for (int i = 0; i < count; i++) {
                filterableString = list.get(i);
                if (filterableString.toLowerCase().contains(filterString)) {
                    nlist.add(filterableString);
                }
            }

            results.values = nlist;
            results.count = nlist.size();

            return results;
        }
@覆盖
受保护的筛选器结果性能筛选(CharSequence约束){
String filterString=constraint.toString().toLowerCase();
FilterResults results=新的FilterResults();
最终列表=原始数据;
int count=list.size();
最终ArrayList NLList=新ArrayList(计数);
串滤器串;
for(int i=0;i
您的
performFiltering(CharSequence约束)
方法返回null。您应该添加一些逻辑来过滤该方法中的数据您的
performFiltering(CharSequence约束)
method正在返回null。您应该添加一些逻辑来过滤该方法中的数据。originalData在这里表示什么?我得到一个null指针异常。java.lang.NullPointerException:尝试在null对象引用上为代码int count=List.size()的链接调用接口方法“int java.util.List.size();
originalData
这是您从服务器获取的患者列表,originalData在这里代表什么?我得到一个空指针异常。java.lang.NullPointerException:尝试在空对象引用上为代码int count=list.size()的链接调用接口方法“int java.util.list.size()”;
originalData
这是您从服务器获取的患者列表