簡體   English   中英

從另一個類Android訪問方法

[英]Accessing Methods from Another Class Android

我正在創建一個將使用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);
        }
    }
}

您的DBAdapter類沒有open()方法。 具有該方法的是私有內部類DatabaseHelper 您有兩個選擇來公開open() ,以便能夠按您期望的方式調用它。

選項1:向DBAdapter添加一個open()方法,該方法調用DatabaseHelperopen()方法

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

選項2:完全刪除DatabaseHelper ,並讓DBAdapter extends SQLiteOpenHelper

public class DBAdapter extends SQLiteOpenHelper {
    ...
    public DBAdapter(Context ctx) {
        this.context = ctx;
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }

    // add all the code from inside DatabaseHelper below

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

    // you will have to change this method to work
    public DBAdapter open() throws SQLException
    {
        db = getWritableDatabase();
        return this;
    }

    ...
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM