I’m trying to filter the results of a cursor returned from my database Handler class through the use of the ‘setFilterQueryProvider’ on the simple cursor adapter class. At the moment I’m getting multiple errors on the following method:
Current errors:
Error 1:
The method FilterQueryProvider() is undefined for the type ViewAppointments.
Error 2:
Syntax error, insert ";" to complete Statement.
Error 3:
Illegal modifier for the variable runQuery; only final is permitted
Error 4:
Syntax error on token ")", ; expected
Error 5:
Void methods cannot return a value.
Error 6:
Syntax error on token ")", delete this token.
The above errors are noted on the following code:
DBHandlerApp changedAppoint = new DBHandlerApp (this, null, null);
//ERROR 1 on 'FilterQueryProvider' and ERROR 2 on end ')'.
cursorAdapter.setFilterQueryProvider(FilterQueryProvider()
{
//ERROR 3 on 'runQuery'. Error 4 on end ')'.
public Cursor runQuery(CharSequence constraint)
{
//ERROR 5.
return changedAppoint.getChanges(constraint.toString());
}
ERROR 6 on end ')'
});
Here is the completed class. I currently have this problematic method in my ‘onCreate’ method of the class. The fact ‘ERROR 5’ is complaining about the return type leads me to believe this being in ‘OnCreate’ is the wrong place as obviously it is void. Placing it else where in the code produces other brackets errors.
Hopefully someone can see where my layout error is going wrong.
package com.example.flybase2;
import android.app.AlertDialog;
import android.app.AlertDialog.Builder;
import android.app.ListActivity;
import android.content.DialogInterface;
import android.content.Intent;
import android.database.Cursor;
import android.os.Bundle;
import android.support.v4.widget.SimpleCursorAdapter;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.ListView;
public class ViewAppointments extends ListActivity implements OnClickListener {
SimpleCursorAdapter cursorAdapter;
ListView searchedAppView;
ImageButton searchAppoints;
EditText searchAppName;
Long id;
//@SuppressWarnings("deprecation")
//@SuppressWarnings("static-access")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.appointmentview);
searchedAppView = (ListView)findViewById(android.R.id.list);
searchAppoints = (ImageButton) findViewById(R.id.btnSearchAppointName);
searchAppName = (EditText) findViewById(R.id.inputAppointName);
DBHandlerApp DBAppointments = new DBHandlerApp(this, null, null);
DBHandlerApp searchApps = new DBHandlerApp(this, null, null);
searchApps.open();
Cursor cursor = searchApps.getAppointmentsData();
searchApps.close();
startManagingCursor(cursor);
String [] from = new String [] {DBAppointments.KEY_NAMEAPP, DBAppointments.KEY_TYPEAPP, DBAppointments.KEY_TIMEAPP, DBAppointments.KEY_DATEAPP, DBAppointments.KEY_COMMENTAPP};
int [] to = new int [] {R.id.txtAppointName, R.id.txtAppointType, R.id.txtAppointTime, R.id.txtAppointDate, R.id.txtAppointCom};
cursorAdapter = new SimpleCursorAdapter(this, R.layout.setappointviews, cursor, from, to);
searchedAppView.setAdapter(cursorAdapter);
searchedAppView.setTextFilterEnabled(true);
searchAppoints.setOnClickListener(this);
searchAppName.addTextChangedListener(new TextWatcher()
{
@Override
public void onTextChanged(CharSequence s, int start, int before,
int count) {
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
}
@Override
public void afterTextChanged(Editable s) {
cursorAdapter.getFilter().filter(s.toString());
}
});
//********** ERRORS **********
DBHandlerApp changedAppoint = new DBHandlerApp (this, null, null);
cursorAdapter.setFilterQueryProvider(FilterQueryProvider()
{
public Cursor runQuery(CharSequence constraint)
{
return changedAppoint.getChanges(constraint.toString());
}
});
};
@Override
public void onClick(View clickedSearch)
{
String searchedName = searchAppName.getText().toString();
DBHandlerApp searchOnName = new DBHandlerApp(this, null, null);
DBHandlerApp getColumns = new DBHandlerApp(this, null, null);
searchOnName.open();
Cursor nameResult = searchOnName.searchAppByName(searchedName);
@SuppressWarnings("static-access")
String [] from = new String [] {getColumns.KEY_NAMEAPP, getColumns.KEY_TYPEAPP, getColumns.KEY_TIMEAPP, getColumns.KEY_DATEAPP, getColumns.KEY_COMMENTAPP};
int [] to = new int [] {R.id.txtAppointName, R.id.txtAppointType, R.id.txtAppointTime, R.id.txtAppointDate, R.id.txtAppointCom};
@SuppressWarnings("deprecation")
SimpleCursorAdapter cursorAdapter = new SimpleCursorAdapter(this, R.layout.setappointviews, nameResult, from, to);
searchedAppView.setAdapter(cursorAdapter);
}
@Override
protected void onListItemClick(ListView l, View v, int position, long idd) {
super.onListItemClick(l, v, position, idd);
final DBHandlerApp delApp = new DBHandlerApp(this, null, null);
id = idd;
final CharSequence[] items = {"Edit Appointment Details", "Delete Appointment"};
Builder alertDialogBuilder = new AlertDialog.Builder(ViewAppointments.this);
alertDialogBuilder.setTitle("Appointment Options:");
alertDialogBuilder.setItems(items, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int item) {
if (items[item].equals("Edit Appointment Details")) {
Intent setName = new Intent("com.example.flybase2.AppointmentEditChanges");
setName.putExtra("passedID", id);
startActivity(setName);
}
else if (items[item].equals("Delete Appointment")) {
delApp.open();
delApp.deleteAppointment(id);
delApp.close();
}
}
});
alertDialogBuilder.show();
}
}
The error is pretty self explanatory, instead of providing an instance of
FilterQueryProviderto thesetFilterQueryProvider()method you call aFilterQueryProvider()method which will mess things up. Instead it should be like this:And make
changedAppointfinal:See if you have any errors after the changes above.