1

単純なカーソルアダプタクラスの「setFilterQueryProvider」を使用して、データベースのHandlerクラスから返されたカーソルの結果をフィルタリングしようとしています。現在、次の方法で複数のエラーが発生しています。

現在のエラー:

エラー1:

The method FilterQueryProvider() is undefined for the type ViewAppointments.

エラー2:

Syntax error, insert ";" to complete Statement.

エラー3:

Illegal modifier for the variable runQuery; only final is permitted

エラー4:

Syntax error on token ")", ; expected

エラー5:

Void methods cannot return a value.

エラー6:

Syntax error on token ")", delete this token.

上記のエラーは、次のコードに記載されています。

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 ')'
    });

これが完成したクラスです。現在、この問題のあるメソッドがクラスの「onCreate」メソッドにあります。「ERROR5」がリターンタイプについて不平を言っているという事実は、これが「OnCreate」にあることは明らかに無効であるため、間違った場所であると私に信じさせます。コード内の別の場所に配置すると、他のブラケットエラーが発生します。

うまくいけば、誰かが私のレイアウトエラーがどこで間違っているのかを知ることができます。

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();
}

}

4

2 に答える 2

0

メソッドFilterQueryProvider()は、タイプViewAppointmentsに対して未定義です。

FilterQueryProviderエラーは、setFilterQueryProvider()メソッドを呼び出すメソッドにインスタンスを提供するのではなく、かなり自明FilterQueryProvider()です。代わりに、次のようになります。

cursorAdapter.setFilterQueryProvider(new FilterQueryProvider() {

    public Cursor runQuery(CharSequence constraint) {
        return changedAppoint.getChanges(constraint.toString());
    }
});

そして作るchangedAppoint final

final DBHandlerApp changedAppoint = new DBHandlerApp (this, null, null);

上記の変更後にエラーが発生するかどうかを確認してください。

于 2013-02-04T20:06:47.247 に答える
0

私はなんとかこの問題を修正することができました。これは多くの問題が原因でしたが、最大の問題は、「filterQueryProvider」ウィジェットをインポートしなかったという事実でした。

于 2013-02-04T21:09:33.243 に答える