Вызовы методов (статические и нестатические) для SQL и ListActivity. - PullRequest
0 голосов
/ 27 декабря 2010

Я прочитал тонну постов в сети и вижу, что многие другие хотят делать то же самое, и все посты ссылаются на необходимость делать что-то вроде Singleton или использовать громоздкие подпрограммы conext.Почему доступ к классу-оболочке базы данных сложнее, чем доступ к любому другому действию (что довольно просто)?У меня нет проблем с доступом к другим занятиям из другого занятия - я, должно быть, спал во время этого занятия - что мне не хватает?

Вот фон:

Основной код вызывает основной макет с OneКнопка.

Кнопка вызывает класс DB Wapper (называемый DB_Interface, который имеет компоновку с кнопками для выполнения нужных мне операций с БД. Основные вещи БД определены в помощнике - яназывая его DBHelp_mate).

Без использования основного кода я могу запустить приложение (используя DB_Interface в качестве основного действия) , и оно прекрасно работает . Но , как только я использую Основной код для вызова DB_Interface, он падает при нажатии кнопки.

Да - я правильно изменил файл манифеста, чтобы отразить, какое действие является основным, так кака также объявление о других действиях (это не ракетостроение - и, действительно, я ученый в области ракетостроения!).

Итак, мой вопрос таков: как я могу вызвать DB_Interface из Maincodeи он вызывает DBHelp_mate и работает?

Спасибо - новые коды являются следующими (без содержимого внутри DBHelp_mate, которое не должно влиять на ваше руководство).Пожалуйста, предоставьте конкретные звонки / код, вместо того, чтобы говорить что-то вроде «вам нужно создать экземпляр. Это и то» - это просто создает дополнительную путаницу и много ответов / повторных сообщений.

НОВЫЙ КОД:

public class Maincode extends Activity { 
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    final Button goToDB = (Button) findViewById(R.id.Button01);
    //  ---------------------------------------------------------
    goToDB.setOnClickListener(new View.OnClickListener() {
      public void onClick(View v) {
        Intent doIt = new Intent();
        doIt.setClassName("com.bt.hopex", "com.bt.hopex.DB_Interface");
        startActivity(doIt);
      }
    }); // end -----------------------------------------------   
  }//end onCreate 
}//end activity

DB_INTERFACE

  public class DB_Interface extends Activity { 
  private DBHelp_mate ddbb;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.db_dialog);       
        ddbb = new DBHelp_mate(this);
        ddbb.open();       
    }//end onCreate
}//end activity 

DBHelp-mate

public class DBHelp_mate {

  private DatabaseHelper dbHelper ;
  private SQLiteDatabase db;

  private Context mCtx = null;

  //*******************************************************
  private static final String DATABASE_NAME = "XgAlert_db";
  private static final String DATABASE_TABLE = "tblData";
  private static final int    DATABASE_VERSION = 2;
  private static final String DATABASE_CREATE =
      "create table gAlert_alerts ( "
      + "_id integer primary key autoincrement, "
      + "alert_text text not null,"
      + "alert_date varchar(20) not null,"
      + "alert_time varchar(20) not null"
      +");";

   //-------------------------------------------------------------
  private static class DatabaseHelper extends SQLiteOpenHelper {
    DatabaseHelper(Context ctx) {
      super(ctx, DATABASE_NAME, null, DATABASE_VERSION);
    }
    @Override
    public void onCreate(SQLiteDatabase db) {
      db.execSQL(DATABASE_CREATE);
    }
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion){
      db.execSQL("DROP IF TABLE EXISTS "+ DATABASE_TABLE); change drop to alter later after all is working!
      onCreate(db);
    }
  }

  public DBHelp_mate(Context ctx) {
    mCtx = ctx;
  }
  //********************************************************

  public DBHelp_mate open () throws SQLException {
    dbHelper = new DatabaseHelper(mCtx);
    db = dbHelper.getWritableDatabase();
    return this;
  }
  //------------------------------------------------------------
  /** Closes a database connection */
  public void close() {
    dbHelper.close();
  }    
  //------------------------------------------------------------

Ответы [ 3 ]

2 голосов
/ 27 декабря 2010

Если я не могу изменить нестатический метод на статический, как я могу вызвать этот метод из другого действия?

Вы не можете.Вы реорганизуете свой код таким образом, чтобы ваша модель данных была доступна из всех видов деятельности, которые в ней нуждаются.

1 голос
/ 27 декабря 2010

Проблема заключается в том, что вам нужно создать экземпляр класса OptPanel, например

OptPanel myOptPanel = new OptPanel();

Только так вы сможете получить доступ к методу showRecords () и передать myOptPanel в качестве параметра другомудеятельность (как конструктор).

public class MyActivity
{
    private OptPanel _optPanel;

    public MyActivity(OptPanel myOptPanel)
    {
        this._optPanel = myOptPanel;
    }

    public void showRecordsInActivity()
    {
        this._optPanel.showRecords(null);
    }
}

Если вы пишете

MyClass.myStaticClassMethod();

, вы можете получить доступ только к статическим элементам.

Если вы пишете

MyClass theClass = new MyClass();
theClass.MyObjectMethod();

Вы можете получить доступ к членам объекта.

Это общий синтаксис ООП.

0 голосов
/ 04 января 2011

решаемые

После многих дней борьбы с этим я купил книгу - Android для чайников и, Бинго , как это сделать, похоронен в книге. Для тех, кто интересуется, как это сделать, прочитайте соответствующие разделы книги.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...