получение ошибки в параметре поиска функции findColumns списка в классе фрагмента - PullRequest
0 голосов
/ 27 августа 2018

пытается отфильтровать элементы представления поиска с помощью SearchView.OnQueryTextListener, но это приводит к некоторой ошибке, я не знаю, как это решит, ребята, пожалуйста, помогите нам, у меня есть специальный код под текстом

вот класс фрагмента, и я реализовал меню поиска на панели действий

    package shubh.parker.com.fullformer;
    import android.app.ProgressDialog;
    import android.app.SearchManager;
    import android.content.Context;
    import android.content.Intent;
    import android.database.Cursor;
    import android.database.MatrixCursor;
    import android.os.AsyncTask;
    import android.os.Bundle;
    import android.provider.BaseColumns;
    import android.support.v4.app.Fragment;
    import android.support.v4.widget.CursorAdapter;
    import android.support.v4.widget.SimpleCursorAdapter;
    import android.support.v7.widget.SearchView;
    import android.text.Editable;
    import android.text.TextWatcher;
    import android.util.Log;
    import android.view.Gravity;
    import android.view.LayoutInflater;
    import android.view.Menu;
    import android.view.MenuInflater;
    import android.view.MenuItem;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.AdapterView;
    import android.widget.EditText;
    import android.widget.ListView;
    import android.widget.Toast;

    import org.json.JSONArray;
    import org.json.JSONObject;

    import java.util.ArrayList;
    import java.util.List;
    public class FullForm extends Fragment {
        ProgressDialog dialog;
        internet inter = new internet(this.getContext());
        MyHttpUrl HttpUrl;
        View fragmentView;
        private List<Code_get_set> listCode;
        ListView list_b_directory=null;
        Code_get_set CodeList=null;
        MyHttpRequest objMyHttpRequest=new MyHttpRequest();
        CodeCustomAdapt adapter;
        EditText editTxt;
        private SimpleCursorAdapter myAdapter;
        private String[] strArrData = {"No ShortCode"};
        SearchView searchView = null;
        ArrayList<Code_get_set> All_code_list=new ArrayList<Code_get_set>();
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

            fragmentView = inflater.inflate(R.layout.tab_fullform, container, false);
            list_b_directory = (ListView)fragmentView.findViewById(R.id.codeListView);
    //        editTxt = (EditText)fragmentView.findViewById(R.id.search);
            final String[] from = new String[] {"Code"};
            final int[] to = new int[] {android.R.id.text1};
            myAdapter = new SimpleCursorAdapter(getActivity(), android.R.layout.simple_spinner_dropdown_item, null, from, to, CursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER);
            setHasOptionsMenu(true);
            new GetVideoUrls().execute();
    //        doSearch();
            return fragmentView;
        }
        public void FillListView(ArrayList<Code_get_set> All_codeList)
        {

    //        adapter= new CodeCustomAdapt(getActivity(), All_codeList);
    //        editTxt.addTextChangedListener(new TextWatcher() {
    //
    //            @Override
    //            public void onTextChanged(CharSequence s, int start, int before, int count) {
    //                System.out.println("Text ["+s+"]");
    //
    ////                adapter.getFilter().filter(s.toString());
    //                adapter.getFilter().filter(s.toString());
    //            }
    //
    //            @Override
    //            public void beforeTextChanged(CharSequence s, int start, int count,
    //                                          int after) {
    ////                adapter.getFilter().filter(s.toString());
    //            }
    //
    //            @Override
    //            public void afterTextChanged(Editable s) {
    ////                adapter.getFilter().filter(s.toString());
    //            }
    //        });

    //        final ListView list_b_directory = (ListView) findVi/ewById(R.id.codeListView);
            list_b_directory.setAdapter(new CodeCustomAdapt(getActivity(), All_codeList));

            list_b_directory.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> a, View v, int position, long id) {
                    Object o = list_b_directory.getItemAtPosition(position);
                    Code_get_set fullObject = (Code_get_set)o;


                }
            });


        }
        @Override
        public void onPrepareOptionsMenu(Menu menu) {

            // adds item to action bar
            getActivity().getMenuInflater().inflate(R.menu.search_main, menu);

            // Get Search item from action bar and Get Search service
    //        MenuItem menuItem = menu.findItem(R.menu.search_main);
            MenuItem searchItem = menu.findItem(R.id.action_search);
            SearchManager searchManager = (SearchManager) getActivity().getSystemService(Context.SEARCH_SERVICE);
            if (searchItem != null) {
                searchView = (SearchView) searchItem.getActionView();
            }
            if (searchView != null) {
                searchView.setSearchableInfo(searchManager.getSearchableInfo(getActivity().getComponentName()));
                searchView.setIconified(false);
                searchView.setSuggestionsAdapter(myAdapter);
                // Getting selected (clicked) item suggestion
                searchView.setOnSuggestionListener(new SearchView.OnSuggestionListener() {
                    @Override
                    public boolean onSuggestionClick(int position) {

                        // Add clicked text to search box
                        CursorAdapter ca = searchView.getSuggestionsAdapter();
                        Cursor cursor = ca.getCursor();
                        cursor.moveToPosition(position);
                        searchView.setQuery(cursor.getString(cursor.getColumnIndex("Code")),false);
                        return true;
                    }

                    @Override
                    public boolean onSuggestionSelect(int position) {
                        return true;
                    }
                });
                searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
                    @Override
                    public boolean onQueryTextSubmit(String s) {
                        return false;
                    }

                    @Override
                    public boolean onQueryTextChange(String s) {

                        // Filter data
                        final MatrixCursor mc = new MatrixCursor(new String[]{ BaseColumns._ID, "fishName" });
                        for (int i=0; i<strArrData.length; i++) {
                            if (strArrData[i].toLowerCase().startsWith(s.toLowerCase()))
                                mc.addRow(new Object[] {i, strArrData[i]});
                        }
                        myAdapter.changeCursor(mc);
                        return false;
                    }
                });
            }

    //        return true;
        }

        @Override
        public boolean onOptionsItemSelected(MenuItem item) {

            return super.onOptionsItemSelected(item);
        }


        // Every time when you press search button on keypad an Activity is recreated which in turn calls this function





    //    @Override
        protected void onNewIntent(Intent intent) {

            if (Intent.ACTION_SEARCH.equals(intent.getAction())) {
                String query = intent.getStringExtra(SearchManager.QUERY);
                if (searchView != null) {
                    searchView.clearFocus();
                }

                // User entered text and pressed search button. Perform task ex: fetching data from database and display

            }
        }
        public class GetVideoUrls extends AsyncTask<Void, Void, String> {

            String result = null;


            @Override
            protected void onPreExecute() {
    //            dialog = new ProgressDialog(MyMenu.this);
    //            dialog.getWindow().setGravity(Gravity.CENTER_HORIZONTAL);
    //            dialog.getWindow().setGravity(Gravity.CENTER_VERTICAL);
    //            dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
    //            dialog.setIndeterminate(true);
    //            dialog.setCancelable(true);
    //            dialog.show();


                dialog = new ProgressDialog(getActivity());
                dialog.getWindow().setGravity(Gravity.CENTER);
                dialog.setMessage("Loading...");
                dialog.setIndeterminate(true);
                dialog.setCancelable(true);
                dialog.show();

            }


            @Override
            protected String doInBackground(Void... params) {
                String Response = null;

                try {
                    Log.d("Result12", "jhl");
                    String PostData = "action=code_pull&api_key=peterfullformer2018";
                    Response = objMyHttpRequest.PostRequest(MyHttpUrl.Requesturl, PostData);
                    Log.d("Result", Response);
                    //  Toast.makeText(Business.this,"Business Call.."+Response,Toast.LENGTH_SHORT).show();
                } catch (Exception e) {
                }
                return Response;
            }

            @Override
            protected void onPostExecute(final String success) {

                ArrayList<Code_get_set> AllCodeList=new ArrayList<>();


                super.onPostExecute(success);
                Log.d("one", "one");
                // Toast.makeText(Business.this,"Business Call.."+success.toString(),Toast.LENGTH_SHORT).show();
                Log.d("2", "2");
                if (success != null) {
                    try {
                        Log.d("3", "3");
                        Log.d("404", "404"+success);
                        JSONObject jsonObj = new JSONObject(success);
                        String status= jsonObj.getString("Status");
                        if(status.equals("ok")){
                            JSONArray DataArray= jsonObj.getJSONArray("code");

                            for(int i=0;i<=DataArray.length()-1;i++) {
                                JSONObject json_Obj = DataArray.getJSONObject(i);
                                if(json_Obj !=null) {
                                    CodeList=new Code_get_set();
                                    CodeList.setcodeid(json_Obj.getInt("id"));
                                    CodeList.setCode(json_Obj.getString("Code"));
                                    CodeList.setCodeFullName(json_Obj.getString("CodeFullName"));
                                    CodeList.setAboutCode(json_Obj.getString("AboutCode"));
                                    CodeList.setAddedBy(json_Obj.getString("AddedBy"));
    //                                CodeList.setAddedBy(json_Obj.getString("date"));

                                    AllCodeList.add(CodeList);


                                }

                            }

                            All_code_list=AllCodeList;
                            try {
                                FillListView( AllCodeList);
                            }
                            catch (NullPointerException e)
                            {
                                Toast.makeText(getActivity(), "Error" +  e.getMessage(), Toast.LENGTH_SHORT).show();
                            }


                        }
    //
                        Log.d("status",status);
                        ;
    //
                    }
                    catch(Exception e)
                    {

                        Toast.makeText(getActivity(), "Error" +  e.getMessage(), Toast.LENGTH_SHORT).show();
                    }
                }
                else {
                    // Toast.makeText(Business.this, "Error" + success, Toast.LENGTH_SHORT).show();
                }
                dialog.dismiss();
            }
        }
    }

и вот ошибка, которую я получаю после ввода текста в строке поиска

   08-28 00:27:04.674 13998-13998/shubh.parker.com.fullformer E/AndroidRuntime: FATAL EXCEPTION: main
        Process: shubh.parker.com.fullformer, PID: 13998
        java.lang.IllegalArgumentException: column 'Code' does not exist
            at android.database.AbstractCursor.getColumnIndexOrThrow(AbstractCursor.java:333)
            at android.support.v4.widget.SimpleCursorAdapter.findColumns(SimpleCursorAdapter.java:322)
            at android.support.v4.widget.SimpleCursorAdapter.swapCursor(SimpleCursorAdapter.java:334)
            at android.support.v4.widget.CursorAdapter.changeCursor(CursorAdapter.java:333)
            at shubh.parker.com.fullformer.FullForm$3.onQueryTextChange(FullForm.java:156)
            at android.support.v7.widget.SearchView.onTextChanged(SearchView.java:1180)
            at android.support.v7.widget.SearchView$10.onTextChanged(SearchView.java:1714)
            at android.widget.TextView.sendOnTextChanged(TextView.java:8048)
            at android.widget.TextView.handleTextChanged(TextView.java:8110)
            at android.widget.TextView$ChangeWatcher.onTextChanged(TextView.java:10225)
            at android.text.SpannableStringBuilder.sendTextChanged(SpannableStringBuilder.java:1033)
            at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:559)
            at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:492)
            at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:34)
            at android.view.inputmethod.BaseInputConnection.replaceText(BaseInputConnection.java:685)
            at android.view.inputmethod.BaseInputConnection.setComposingText(BaseInputConnection.java:445)
            at com.android.internal.view.IInputConnectionWrapper.executeMessage(IInputConnectionWrapper.java:340)
            at com.android.internal.view.IInputConnectionWrapper$MyHandler.handleMessage(IInputConnectionWrapper.java:78)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:148)
            at android.app.ActivityThread.main(ActivityThread.java:5451)
            at java.lang.reflect.Method.invoke(Native Method)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

и это класс адаптера для просмотра списка

package shubh.parker.com.fullformer;

import android.content.Context;
import android.text.Html;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Filter;
import android.widget.Filterable;
import android.widget.ImageView;
import android.widget.TextView;

import com.squareup.picasso.Picasso;

import java.util.ArrayList;
import java.util.List;
import java.util.Locale;

/**
 * Created by $hubh on 6/3/2018.
 */
public class CodeCustomAdapt extends BaseAdapter implements Filterable {
    private LayoutInflater mInflater;

    private static ArrayList<Code_get_set> searchArrayList;
    private List<Code_get_set> mOriginalValues;

    public CodeCustomAdapt(Context context, ArrayList<Code_get_set> results) {
        searchArrayList = results;
        mInflater = LayoutInflater.from(context);

    }

    public int getCount() {
        return searchArrayList.size();
    }

    public Object getItem(int position) {
        return searchArrayList.get(position);
    }

    public long getItemId(int position) {
        return position;
    }

    public View getView(int position, View convertView, ViewGroup parent) {
        BusinessViewHolder holder;
        String Imgurl=MyHttpUrl.BlankImage;
        String VideoUrl="";
        String VideoID="";

        try {
            if (convertView == null) {
//                convertView = mInflater.inflate(R.layout.business_list_view, null);
                convertView = mInflater.inflate(R.layout.codelist, null);
                holder = new BusinessViewHolder();
                holder.codeName = (TextView) convertView.findViewById(R.id.codeName);
                holder.codeFullName = (TextView) convertView.findViewById(R.id.codeFullName);
                holder.codeCategoryName = (TextView) convertView.findViewById(R.id.codeCategoryName);
                holder.aboutCode = (TextView) convertView.findViewById(R.id.aboutCode);
                holder.addedBy = (TextView) convertView.findViewById(R.id.addedBy);
                holder.NewsImage = (ImageView) convertView.findViewById(R.id.img_bl_category_image);
                //holder.VideoTitle = (WebView) convertView.findViewById(R.id.txt_videoTitle);
                holder.codeName.setFocusable(false);
//                holder.ImageOfVideoUrl = (ImageView) convertView.findViewById(R.id.img_ImageVideo);

                convertView.setTag(holder);
            } else {
                holder = (BusinessViewHolder) convertView.getTag();
            }

            holder.codeName.setText(Html.fromHtml(String.valueOf(searchArrayList.get(position).getCode())));
            holder.codeFullName.setText(Html.fromHtml(String.valueOf(searchArrayList.get(position).getCodeFullName())));
            holder.codeCategoryName.setText(Html.fromHtml(String.valueOf(searchArrayList.get(position).getCategoryName())));
            holder.aboutCode.setText(Html.fromHtml(String.valueOf(searchArrayList.get(position).getAboutCode())));
            holder.addedBy.setText(Html.fromHtml(String.valueOf(searchArrayList.get(position).getAddedBy())));
            //holder.VideoTitle.loadData(searchArrayList.get(position).getVideo_Title(),"text/html; charset=UTF-8","utf-8");
//            Imgurl=MyHttpUrl.DomainurlForImage+ searchArrayList.get(position).getNews_Image().replace("\"","");

            Log.d("Imgurl",Imgurl);
            //Log.d("Newsdate",Newsdate);
            Picasso.with(mInflater.getContext())
                    .load(Imgurl).resize(120,120).noFade()
                    .into( holder.NewsImage);
//            String VideoUrl = "Hello World!";
//            String hellWrld = helloWorld.replace("o","");
//            VideoUrl= searchArrayList.get(position).getVideo_url();
//
//            Uri uri= Uri.parse(VideoUrl);
//            VideoID= uri.getQueryParameter("v");
//
//            // VideoUrl=MyHttpUrl.DomainurlForImage+ searchArrayList.get(position).getVideo_url().replace("\"","");
//            Imgurl=MyHttpUrl.ImageOfVideoUrl.replace("VideoId",VideoID);
//            Log.d("Imgurl",Imgurl);
//            Picasso.with(mInflater.getContext())
//                    .load(Imgurl).noFade()
//                    .into( holder.ImageOfVideoUrl);
//
//            if (position % 2 == 1) {
//                //  convertView.setBackgroundColor(Color.TRANSPARENT);
//                //   convertView.setBackgroundColor(Color.parseColor("#5F0F28"));
//
//            } else {
//                // convertView.setBackgroundColor(Color.parseColor("#1F3A67"));
//                //convertView.setBackgroundColor(Color.CYAN);
//            }
            //holder.img_BusinessCategoryImage.setImageBitmap(bmp);
        }
        catch(Exception e)
        {}
        return convertView;

    }

    static class BusinessViewHolder {
        TextView codeName;
        TextView codeFullName;
        TextView codeCategoryName;
        TextView aboutCode;
        TextView addedBy;
        ImageView NewsImage;

    }
//    @Override
    public Filter getFilter() {

        Filter filter = new Filter() {

            @SuppressWarnings("unchecked")
            @Override
            protected void publishResults(CharSequence constraint, FilterResults results) {

                searchArrayList = (ArrayList<Code_get_set>) results.values; // has

                notifyDataSetChanged();
            }

            @Override
            protected FilterResults performFiltering(CharSequence constraint) {
                FilterResults results = new FilterResults(); // Holds the
                // results of a
                // filtering
                // operation in
                // values
                // List<String> FilteredArrList = new ArrayList<String>();
                List<Code_get_set> FilteredArrList = new ArrayList<Code_get_set>();

                if (mOriginalValues == null) {
                    mOriginalValues = new ArrayList<Code_get_set>(searchArrayList); // saves

                }

                /********
                 *
                 * If constraint(CharSequence that is received) is null returns
                 * the mOriginalValues(Original) values else does the Filtering
                 * and returns FilteredArrList(Filtered)
                 *
                 ********/
                if (constraint == null || constraint.length() == 0) {

                    // set the Original result to return
                    results.count = mOriginalValues.size();
                    results.values = mOriginalValues;
                } else {
                    Locale locale = Locale.getDefault();
                    constraint = constraint.toString().toLowerCase(locale);
                    for (int i = 0; i < mOriginalValues.size(); i++) {
                        Code_get_set model = mOriginalValues.get(i);

                        String data = model.getCode();
                        if (data.toLowerCase(locale).contains(constraint.toString())) {

                            FilteredArrList.add(model);
                        }
                    }
                    // set the Filtered result to return
                    results.count = FilteredArrList.size();
                    results.values = FilteredArrList;

                }
                return results;
            }
        };
        return filter;
    }



}

как я могу это исправить ... заранее спасибо, ребята

...