powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Помогите с классами
10 сообщений из 10, страница 1 из 1
Помогите с классами
    #38390255
Slon747
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть 3 класса: MainActivity, WorkDB и WorkFiles.
Хочу из класса WorkFiles получить доступ к функционалу класса WorkDB.

Файл MainActivity.java:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
public class MainActivity extends Activity {

	WorkDB sqh;
	SQLiteDatabase sqdb;

	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);

		// Инициализируем класс WorkDB
		sqh = new WorkDB(this);
		
		// База нам нужна для записи и чтения
		sqdb = sqh.getWritableDatabase();

		// Инициализируем класс WorkFiles
		wf = new WorkFiles(this);
}



Файл WorkFiles.java:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
public class WorkFiles extends Activity{

	WorkDB sqh;
	static SQLiteDatabase sqdb;

	public WorkFiles(Context context) {
		// Инициализируем класс WorkDB
		sqh = new WorkDB(this);

		// База нам нужна для записи и чтения
		sqdb = sqh.getWritableDatabase();

	}



При выполнении строки "sqdb = sqh.getWritableDatabase();" из конструктора класса WorkFiles возникает ошибка:
Unable to start activity ComponentInfo{com.example.first/com.example.first.MainActivity}: java.lang.NullPointerException
Скажите, что не так?
...
Рейтинг: 0 / 0
Помогите с классами
    #38390260
avp.mk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Видимо в методе getWritableDatabase() пытаетесь запустить( start ) Activity(WorkFiles), чего нельзя сделать т.к. она ещё не создана.
...
Рейтинг: 0 / 0
Помогите с классами
    #38390265
Slon747
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
avp.mkВидимо в методе getWritableDatabase() пытаетесь запустить( start ) Activity(WorkFiles), чего нельзя сделать т.к. она ещё не создана.

Я пробовал по аналогии с MainActivity.java разместить эти же строки в методе onCreate класса WorkFiles.
Но почему-то onCreate не выполняется при создании класса WorkFiles.

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
public class WorkFiles extends Activity{

	WorkDB sqh;
	static SQLiteDatabase sqdb;
	static MainActivity MainClass;
	
	public WorkFiles(Context context) {
	}
	
	public void onCreate(Bundle savedInstanceState) {
		// Инициализируем класс WorkDB
		sqh = new WorkDB(this);

		// База нам нужна для записи и чтения
		sqdb = sqh.getWritableDatabase();
	}
...
Рейтинг: 0 / 0
Помогите с классами
    #38390268
avp.mk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
http://developer.android.com/reference/android/app/Activity.html#onCreate(android.os.Bundle)

И WorkDB думаю незачем так много раз создавать, хватит одного на приложение.
...
Рейтинг: 0 / 0
Помогите с классами
    #38390385
Slon747
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
avp.mkИ WorkDB думаю незачем так много раз создавать, хватит одного на приложение.

Я по разному пробовал, но так и не получилось.
Подскажите пожалуйста на моем примере, как из класса WorkFiles испоьзовать класс WorkDB.
Например, обратиться к SQLiteOpenHelper и вызвать sqdb.execSQL("SELECT * FROM items");
...
Рейтинг: 0 / 0
Помогите с классами
    #38390433
avp.mk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Примерно так (но я давно для андроида не писал..)

MainActivity.java
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
package com.example.first;

import android.app.Activity;
import android.os.Bundle;

public class MainActivity extends Activity {

    public final WorkDb workDb = new WorkDb(this); //возможно придётся переинициализировать в методе onCreate (тогда final придётся убрать)

    @Override public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }
}

WorkFiles.java
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
package com.example.first;

import android.app.Activity;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;

public class WorkFiles extends Activity {

    private final MainActivity mainActivity; //можно и public сделать, хуже не станет

    public WorkFiles(MainActivity mainActivity) {
        this.mainActivity = mainActivity;
    }

    @Override protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        SQLiteDatabase database = mainActivity.workDb.getWritableDatabase();
        database.execSQL("SELECT * FROM items");
    }
}

...
Рейтинг: 0 / 0
Помогите с классами
    #38390504
Slon747
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
avp.mk,

Спасибо за код!
В Ваш код я еще вставил:
public final WorkFiles workFiles = new WorkFiles(this);

Конструктор WorkFiles стал выполняться. Но OnCreate не выполняется, т.к. активити не стартует.
Но как тогда быть?
...
Рейтинг: 0 / 0
Помогите с классами
    #38390506
avp.mk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я не понял вопроса.
...
Рейтинг: 0 / 0
Помогите с классами
    #38391506
Slon747
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
avp.mkЯ не понял вопроса.

Инициализация database в классе WorkFiles не происходит, т.к. не выполняется OnCreate().
А попытка проинициализировать database в конструкторе вызывает ошибку.
...
Рейтинг: 0 / 0
Помогите с классами
    #38391525
Slon747
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот так мне подсказали. Попробовал, работает!
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
public class MainActivity extends Activity {
 
    WorkDB sqh;
    SQLiteDatabase sqdb;
 
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
 
        // Инициализируем класс WorkDB
        sqh = new WorkDB(this);
        
        // База нам нужна для записи и чтения
        sqdb = sqh.getWritableDatabase();
 
        // Инициализируем класс WorkFiles
        wf = new WorkFiles(sqh);




Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
public class WorkFiles extends Activity{
 
    static SQLiteDatabase sqdb;
 
    public WorkFiles(WorkDB sqh) {
 
        // База нам нужна для записи и чтения
        sqdb = sqh.getWritableDatabase();
 
    }
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Помогите с классами
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]