从另一个类Android访问方法

时间:2016-09-09 19:57:58

标签: java android sqlite

我正在创建一个将使用SQLite数据库的Android应用程序。我创建了一个名为DBAdapter的独立类,它包含与数据库相关的所有方法。

当我尝试从主要活动中访问这些方法时,我的问题出现了。我还在学习,但我通常会实例化DBAdapter类,然后我就可以参考这些方法了。然而,我采取的方法是行不通的。下面是我试图实例化该类的单行,其中是该类的其余部分。

我得到的错误是cannot resolve method 'open()'

实例化线条和方法

DBAdapter db = new DBAdapter(this);
db.open();

主要类

import android.app.Dialog;
import android.content.Context;
import android.content.SharedPreferences;
import android.support.design.widget.FloatingActionButton;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.ContentFrameLayout;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

    final Context context = this;

    private FloatingActionButton fab;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        DBAdapter db = new DBAdapter(this);

        db.open();

        fab = (FloatingActionButton) findViewById(R.id.fab);
        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                final Dialog dialog = new Dialog(context);

                dialog.setContentView(R.layout.dialog_box);
                dialog.setTitle("Add new Location!");
                dialog.show();

                final EditText NameEdit = (EditText) findViewById(R.id.NameInput);
                final EditText LatEdit = (EditText) findViewById(R.id.LatInput);
                final EditText LongEdit = (EditText) findViewById(R.id.LongInput);
                final EditText PhoneEdit = (EditText) findViewById(R.id.PhoneInput);
                final Button OkButton = (Button) dialog.findViewById(R.id.dialogButtonOK);
                final Button CancelButton = (Button) dialog.findViewById(R.id.dialogButtonCancel);

                OkButton.setOnClickListener(new View.OnClickListener() {

                    public void onClick(View v) {
                        String RealName = NameEdit.getText().toString();

                        String Lat = LatEdit.getText().toString();
                        Float realLat = Float.parseFloat(Lat);

                        String Long = LongEdit.getText().toString();
                        Float realLong = Float.parseFloat(Long);

                        String Phone = PhoneEdit.getText().toString();
                        Double realPhone = Double.parseDouble(Phone);

                        //Use above to create a new Geofence


                    }
                });

                CancelButton.setOnClickListener(new View.OnClickListener() {

                    public void onClick(View v) {
                        dialog.dismiss();
                    }
                });

            }

        });

    }
}

DBAdpater类

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;

/**
 * Created by Rory on 09/09/2016.
 */
public class DBAdapter {

    private final Context context;
    private DatabaseHelper DBHelper;
    private SQLiteDatabase db;

    //Database Version & name
    private static final String DATABASE_NAME = "OpenSesame";
    private static final int DATABASE_VERSION = 1;
    private static final String TAG = "DBMain";

    private static final String GEOTABLE = "geoTable";

    private static final String KEY_ID = "_id";
    private static final String KEY_NAME = "name";
    private static final String KEY_LAT = "lat";
    private static final String KEY_LONG = "long";
    private static final String KEY_RADIUS = "radius";
    private static final String KEY_PHONE = "phone";

    private  static final String CREATE_GEO_TABLE = "CREATE TABLE "
            + GEOTABLE + "("
            + KEY_ID + " INTEGER PRIMARY KEY AUTO INCREMENT,"
            + KEY_NAME  + " TEXT,"
            + KEY_LAT + " FLOAT,"
            + KEY_LONG + " FLOAT,"
            + KEY_RADIUS + " INTEGER,"
            + KEY_PHONE + " INTEGER" + ")";


    public DBAdapter(Context ctx) {
        this.context = ctx;
        DBHelper = new DatabaseHelper(context);
    }

    private class DatabaseHelper extends SQLiteOpenHelper
    {
        DatabaseHelper(Context context)
        {
            super(context, DATABASE_NAME, null, DATABASE_VERSION);
        }

        /**
         * Method to create each of the tables defined above
         * @param db
         */
        @Override
        public void onCreate(SQLiteDatabase db)
        {
            try {
                db.execSQL(CREATE_GEO_TABLE);
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }

        /**
         * Method for updating the database
         * @param db
         * @param newVersion
         * @param oldVersion
         */
        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
        {
            Log.w(TAG, "Upgrading database from version " + oldVersion + " to "
                    + newVersion + ", which will destroy all old data");
            db.execSQL("DROP TABLE IF EXISTS contacts");
            onCreate(db);
        }

        public DatabaseHelper open() throws SQLException
        {
            db = DBHelper.getWritableDatabase();
            return this;
        }

        public void close() {
            DBHelper.close();
        }

        public Cursor DeleteGeo(String name) {
            return db.rawQuery("delete from geoTable where name = " + name, null);
        }

        public long AddGeo(String name, float lat, float lon, double phone, int radius) {
            ContentValues initialValues = new ContentValues();
            initialValues.put(KEY_NAME, name);
            initialValues.put(KEY_LAT, lat);
            initialValues.put(KEY_LONG, lon);
            initialValues.put(KEY_PHONE, phone);
            initialValues.put(KEY_RADIUS, radius);

            return db.insert(GEOTABLE, null, initialValues);

        }

        public Cursor GetAllGeos() {
            return db.rawQuery("select * from geoTable order by name ASC", null);
        }
    }
}

1 个答案:

答案 0 :(得分:1)

您的DBAdapter课程没有open()方法。私有内部类DatabaseHelper具有该方法。您可以通过两种方式公开open(),以便能够按照预期的方式调用它。

选项1:向调用open()的{​​{1}}方法的DBAdapter添加DatabaseHelper方法

open()

选项2:完全删除public void open() { DBHelper.open(); } ,然后改为DatabaseHelper

DBAdapter extends SQLiteOpenHelper