пытается отфильтровать элементы представления поиска с помощью 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;
}
}
как я могу это исправить ... заранее спасибо, ребята