Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
Amrel
9 / 9 / 2
Регистрация: 14.05.2015
Сообщений: 62
1

Объект Context

29.08.2015, 14:14. Просмотров 672. Ответов 10
Метки нет (Все метки)

Проблема такая:
Я создаю новый класс в отдельном файле для работыSQLite и в нем мне нужен Объект Context, если я наследую Activity
Java
1
2
3
4
5
6
7
8
9
 public class DbNumberMessage extends Activity { 
...
dbHelper = new DBHelper(this);
...
 
  class DBHelper extends SQLiteOpenHelper {
        public DBHelper(Context context) {
            super(context, "DB", null, 1);
        }
Программа вываливается с ошибкой: FATAL EXCEPTION: main java.lang.RuntimeException: Unable to start activity

Пробовал и так:
Java
1
2
3
4
5
6
7
8
9
10
  final DbNumberMessage dbNumberMessage = new DbNumberMessage();
        listMessageStatus=dbNumberMessage.loadDB(this);
_____________________________________________________________________
 
public ArrayList loadDB(Context context){
 
  class DBHelper extends SQLiteOpenHelper {
        public DBHelper(Context context) {
            super(context, "DB", null, 1);
        }
При запуске все работает, если вызываю Activity
Java
1
2
3
Intent newintent = new Intent(context, MainActivity.class);
...
context.startActivity(newintent);
Вылетает FATAL EXCEPTION: main java.lang.RuntimeException: Unable to start activity

Подскажите пожалуйста что я делаю не так...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.08.2015, 14:14
Ответы с готовыми решениями:

Fragment and context
Есть шерлокбар. Два таба у него. Каждому табу привязан свой фрагмент...

Context - ошибка
Здравствуйте! Программа должна выводить карту из google. Использую Picasso как...

Context немного теории
Вообщем нужно мне было запустить из метода своего класса фрагмент. Вообщем как...

Аналог context menu
Всем привет. Я пишу судоку. Проблема в том что при взаимодействии с ячейкой...

Программирование Android. Context
Добрый день! Прошу подсказать, почему в доках...

10
Pablito
2748 / 2182 / 738
Регистрация: 12.05.2014
Сообщений: 7,635
Завершенные тесты: 1
29.08.2015, 14:37 2
Цитата Сообщение от Amrel Посмотреть сообщение
Подскажите пожалуйста что я делаю не так...
ты выкладываешь не полный лог
0
Amrel
9 / 9 / 2
Регистрация: 14.05.2015
Сообщений: 62
29.08.2015, 14:43  [ТС] 3
Цитата Сообщение от Паблито Посмотреть сообщение
ты выкладываешь не полный лог
SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
08-29 14:41:41.002      880-880/com.google.process.gapps E/NetworkScheduler.SchedulerReceiver﹕ Invalid parameter app
08-29 14:41:41.002      880-880/com.google.process.gapps E/NetworkScheduler.SchedulerReceiver﹕ Invalid package name : Perhaps you didn't include a PendingIntent in the extras?
08-29 14:41:41.083    5004-5004/? E/ObjectHelper﹕ Can't find method:setCompatibilityInfo
08-29 14:41:41.418      880-880/com.google.process.gapps E/NetworkScheduler.SchedulerReceiver﹕ Invalid parameter app
08-29 14:41:41.418      880-880/com.google.process.gapps E/NetworkScheduler.SchedulerReceiver﹕ Invalid package name : Perhaps you didn't include a PendingIntent in the extras?
08-29 14:41:41.596    5004-5061/com.estrongs.android.pop E/sdkstat﹕ sdkstat send error++++++java.net.UnknownHostException: Unable to resolve host "hmma.baidu.com": No address associated with hostname
08-29 14:41:50.095    5074-5080/? E/jdwp﹕ jdwp::setsockopt(SO_SNDTIMEO)
08-29 14:41:50.095    5074-5080/? E/jdwp﹕ jdwp::setsockopt(SO_RCVTIMEO)
08-29 14:42:28.110    5090-5090/org.example.harrix.smsreader E/AndroidRuntime﹕ FATAL EXCEPTION: main
    java.lang.RuntimeException: Unable to start activity ComponentInfo{org.example.harrix.smsreader/org.example.harrix.smsreader.MainActivity}: java.lang.NullPointerException
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2306)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2358)
            at android.app.ActivityThread.access$600(ActivityThread.java:156)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1340)
            at android.os.Handler.dispatchMessage(Handler.java:99)
            at android.os.Looper.loop(Looper.java:153)
            at android.app.ActivityThread.main(ActivityThread.java:5297)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:511)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:833)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
            at dalvik.system.NativeStart.main(Native Method)
     Caused by: java.lang.NullPointerException
            at org.example.harrix.smsreader.DbNumberMessage.setDB(DbNumberMessage.java:95)
            at org.example.harrix.smsreader.MainActivity.onCreate(MainActivity.java:57)
            at android.app.Activity.performCreate(Activity.java:5122)
            at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1081)
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2270)
************at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2358)
************at android.app.ActivityThread.access$600(ActivityThread.java:156)
************at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1340)
************at android.os.Handler.dispatchMessage(Handler.java:99)
************at android.os.Looper.loop(Looper.java:153)
************at android.app.ActivityThread.main(ActivityThread.java:5297)
************at java.lang.reflect.Method.invokeNative(Native Method)
************at java.lang.reflect.Method.invoke(Method.java:511)
************at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:833)
************at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
************at dalvik.system.NativeStart.main(Native Method)
08-29 14:42:28.117      502-522/system_process E/AppErrorDialog﹕ Failed to get ILowStorageHandle instance
0
YuraAAA
1578 / 1319 / 282
Регистрация: 25.10.2009
Сообщений: 3,436
Записей в блоге: 2
29.08.2015, 15:17 4
Цитата Сообщение от Amrel Посмотреть сообщение
Caused by: java.lang.NullPointerException
* * * * * *at org.example.harrix.smsreader.DbNumberMessage.setDB(DbNumberMessage.java:95)
что в 95 строке?
0
Amrel
9 / 9 / 2
Регистрация: 14.05.2015
Сообщений: 62
29.08.2015, 15:36  [ТС] 5
Цитата Сообщение от YuraAAA Посмотреть сообщение
что в 95 строке?
Java
1
2
//95 строка
 SQLiteDatabase db = dbHelper.getWritableDatabase();
А вот этот класс
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
    class DBHelper extends SQLiteOpenHelper {
        public DBHelper(Context context) {
            super(context, "DB", null, 1);
        }
        @Override
        public void onCreate(SQLiteDatabase db) {
                db.execSQL("create table busdb ("
                    + "id integer primary key autoincrement,"
                    + "number text,"
                    + "message text,"
                    + "status text,"
                    + "datetime text"+ ");");
        }
        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        }
    }
Проблема в том что для:
Java
1
2
3
4
    class DBHelper extends SQLiteOpenHelper {
        public DBHelper(Context context) {
            super(context, "DB", null, 1);
        }
нужен Объект Context я не знаю где его взять, я так полагаю нужно мой новый класс наследовать вот только от чего я не знаю, чтобы создать объект вот так:
Java
1
DBHelper dbHelper = new DBHelper(this);
Сейчас у меня родительский выглядит так:

DbNumberMessage.java:
Java
1
2
3
4
5
6
7
8
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import java.util.ArrayList;
public class DbNumberMessage{
.......
0
YuraAAA
1578 / 1319 / 282
Регистрация: 25.10.2009
Сообщений: 3,436
Записей в блоге: 2
29.08.2015, 15:46 6
Amrel, можно использовать глобальный application-контекст.

1.

Java
1
2
3
4
5
6
7
8
9
10
11
12
public class TheApplication extends Application {
 
private static TheApplication instance;
 
public void onCreate() {
super.onCreate();
instance = this;
}
 
public static TheApplication getInstance() {
return instance;
}
2. Добавляем его в манифест в тэг application в android:name.

3. Используем
0
Amrel
9 / 9 / 2
Регистрация: 14.05.2015
Сообщений: 62
29.08.2015, 16:03  [ТС] 7
Спасибо Вам за помощь!
Цитата Сообщение от YuraAAA Посмотреть сообщение
Добавляем его в манифест в тэг application в android:name.
Пробовал:
XML
1
2
        <activity android:name=".DbNumberMessage">
        </activity>
Вот ошибки
SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
08-29 15:56:53.128    7455-7468/com.mediatek.atci.service E/ATCIJ﹕ Couldn't find 'atci-serv-fw' socket after 16 times, continuing to retry silently
08-29 15:57:50.801      502-518/system_process E/CellLocation﹕ create GsmCellLocation
08-29 15:57:50.802      502-519/system_process E/CellLocation﹕ create GsmCellLocation
08-29 15:57:50.807      502-519/system_process E/CellLocation﹕ create GsmCellLocation
08-29 15:58:26.714      502-559/system_process E/InputDispatcher﹕ channel '41c61400 org.example.harrix.smsreader/org.example.harrix.smsreader.MainSmsList (server)' ~ Channel is unrecoverably broken and will be disposed!
08-29 15:58:26.714      502-559/system_process E/InputDispatcher﹕ channel '41c91610 org.example.harrix.smsreader/org.example.harrix.smsreader.MainSmsList (server)' ~ Channel is unrecoverably broken and will be disposed!
08-29 15:58:26.799      502-522/system_process E/ActivityManager﹕ Error getting package info: org.example.harrix.smsreader
    android.content.pm.PackageManager$NameNotFoundException: org.example.harrix.smsreader
            at android.app.ApplicationPackageManager.getPackageInfo(ApplicationPackageManager.java:80)
            at com.android.server.am.ActivityManagerService.startProcessLocked(ActivityManagerService.java:2280)
            at com.android.server.am.ActivityManagerService.startProcessLocked(ActivityManagerService.java:2223)
            at com.android.server.am.ActivityStack.startSpecificActivityLocked(ActivityStack.java:867)
            at com.android.server.am.ActivityStack.resumeTopActivityLocked(ActivityStack.java:1903)
            at com.android.server.am.ActivityStack.resumeTopActivityLocked(ActivityStack.java:1493)
            at com.android.server.am.ActivityStack.finishCurrentActivityLocked(ActivityStack.java:4112)
            at com.android.server.am.ActivityStack.finishActivityLocked(ActivityStack.java:4010)
            at com.android.server.am.ActivityManagerService.forceStopPackageLocked(ActivityManagerService.java:4411)
            at com.android.server.am.ActivityManagerService.access$400(ActivityManagerService.java:179)
            at com.android.server.am.ActivityManagerService$2.handleMessage(ActivityManagerService.java:1225)
            at android.os.Handler.dispatchMessage(Handler.java:99)
            at android.os.Looper.loop(Looper.java:153)
            at com.android.server.am.ActivityManagerService$AThread.run(ActivityManagerService.java:1575)
08-29 15:58:26.804      502-522/system_process E/ActivityManager﹕ Error getting package info: org.example.harrix.smsreader
    android.content.pm.PackageManager$NameNotFoundException: org.example.harrix.smsreader
            at android.app.ApplicationPackageManager.getPackageInfo(ApplicationPackageManager.java:80)
            at com.android.server.am.ActivityManagerService.startProcessLocked(ActivityManagerService.java:2280)
            at com.android.server.am.ActivityManagerService.startProcessLocked(ActivityManagerService.java:2223)
            at com.android.server.am.ActivityStack.startSpecificActivityLocked(ActivityStack.java:867)
            at com.android.server.am.ActivityStack.resumeTopActivityLocked(ActivityStack.java:1903)
            at com.android.server.am.ActivityStack.resumeTopActivityLocked(ActivityStack.java:1493)
            at com.android.server.am.ActivityStack.finishCurrentActivityLocked(ActivityStack.java:4112)
            at com.android.server.am.ActivityStack.finishActivityLocked(ActivityStack.java:4010)
            at com.android.server.am.ActivityManagerService.forceStopPackageLocked(ActivityManagerService.java:4411)
            at com.android.server.am.ActivityManagerService.access$400(ActivityManagerService.java:179)
            at com.android.server.am.ActivityManagerService$2.handleMessage(ActivityManagerService.java:1225)
            at android.os.Handler.dispatchMessage(Handler.java:99)
            at android.os.Looper.loop(Looper.java:153)
            at com.android.server.am.ActivityManagerService$AThread.run(ActivityManagerService.java:1575)
08-29 15:58:27.279    5460-5460/com.android.mms E/SpannableStringBuilder﹕ SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length
08-29 15:58:27.285    5460-5460/com.android.mms E/SpannableStringBuilder﹕ SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length
08-29 15:58:27.300    5460-5460/com.android.mms E/SpannableStringBuilder﹕ SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length
08-29 15:58:27.315    5460-5460/com.android.mms E/SpannableStringBuilder﹕ SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length
08-29 15:58:27.330    5460-5460/com.android.mms E/SpannableStringBuilder﹕ SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length
08-29 15:58:27.345    5460-5460/com.android.mms E/SpannableStringBuilder﹕ SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length
08-29 15:58:28.278    7558-7558/com.android.vending E/dalvikvm﹕ Could not find class 'android.app.AppOpsManager', referenced from method com.google.android.gms.common.GooglePlayServicesUtil.zza
08-29 15:58:28.505      880-880/com.google.process.gapps E/NetworkScheduler.SchedulerReceiver﹕ Invalid parameter app
08-29 15:58:28.505      880-880/com.google.process.gapps E/NetworkScheduler.SchedulerReceiver﹕ Invalid package name : Perhaps you didn't include a PendingIntent IN the extras?
08-29 15:58:28.606    7602-7602/com.estrongs.android.pop E/ObjectHelper﹕ Can't find method:setCompatibilityInfo
08-29 15:58:28.875      880-880/com.google.process.gapps E/NetworkScheduler.SchedulerReceiver﹕ Invalid parameter app
08-29 15:58:28.875      880-880/com.google.process.gapps E/NetworkScheduler.SchedulerReceiver﹕ Invalid package name : Perhaps you didn't include a PendingIntent IN the extras?
08-29 15:58:36.040      502-514/system_process E/CellLocation﹕ CREATE GsmCellLocation
08-29 15:58:36.042      502-519/system_process E/CellLocation﹕ CREATE GsmCellLocation
08-29 15:58:36.044      502-519/system_process E/CellLocation﹕ CREATE GsmCellLocation
08-29 15:58:36.153      830-987/com.google.process.location E/CellLocation﹕ CREATE GsmCellLocation
08-29 15:58:36.161     862-1007/com.google.android.gms.persistent E/CellLocation﹕ CREATE GsmCellLocation
08-29 15:58:36.173     862-1007/com.google.android.gms.persistent E/CellLocation﹕ CREATE GsmCellLocation
08-29 15:58:40.234    7710-7710/org.example.harrix.smsreader E/AndroidRuntime﹕ FATAL EXCEPTION: main
    java.lang.RuntimeException: Unable TO START activity ComponentInfo{org.example.harrix.smsreader/org.example.harrix.smsreader.MainActivity}: java.lang.NullPointerException
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2306)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2358)
            at android.app.ActivityThread.access$600(ActivityThread.java:156)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1340)
            at android.os.Handler.dispatchMessage(Handler.java:99)
            at android.os.Looper.loop(Looper.java:153)
            at android.app.ActivityThread.main(ActivityThread.java:5297)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:511)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:833)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
            at dalvik.system.NativeStart.main(Native Method)
     Caused BY: java.lang.NullPointerException
            at android.content.ContextWrapper.openOrCreateDatabase(ContextWrapper.java:229)
            at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:224)
            at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:164)
            at org.example.harrix.smsreader.DbNumberMessage.loadDB(DbNumberMessage.java:44)
            at org.example.harrix.smsreader.MainActivity.onCreate(MainActivity.java:35)
            at android.app.Activity.performCreate(Activity.java:5122)
            at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1081)
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2270)
************at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2358)
************at android.app.ActivityThread.access$600(ActivityThread.java:156)
************at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1340)
************at android.os.Handler.dispatchMessage(Handler.java:99)
************at android.os.Looper.loop(Looper.java:153)
************at android.app.ActivityThread.main(ActivityThread.java:5297)
************at java.lang.reflect.Method.invokeNative(Native Method)
************at java.lang.reflect.Method.invoke(Method.java:511)
************at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:833)
************at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
************at dalvik.system.NativeStart.main(Native Method)
08-29 15:58:40.341      502-522/system_process E/AppErrorDialog﹕ Failed TO GET ILowStorageHandle instance
08-29 15:58:59.401      502-514/system_process E/CellLocation﹕ CREATE GsmCellLocation
08-29 15:58:59.402      502-519/system_process E/CellLocation﹕ CREATE GsmCellLocation
08-29 15:58:59.404      502-519/system_process E/CellLocation﹕ CREATE GsmCellLocation
08-29 15:58:59.511      830-987/com.google.process.location E/CellLocation﹕ CREATE GsmCellLocation
08-29 15:58:59.524     862-1007/com.google.android.gms.persistent E/CellLocation﹕ CREATE GsmCellLocation
08-29 15:58:59.530     862-1007/com.google.android.gms.persistent E/CellLocation﹕ CREATE GsmCellLocation
Ругается на:
Java
1
2
3
       dbHelper = new DBHelper(this);
 
        SQLiteDatabase db = dbHelper.getWritableDatabase(); // 44 Строка
0
YuraAAA
1578 / 1319 / 282
Регистрация: 25.10.2009
Сообщений: 3,436
Записей в блоге: 2
29.08.2015, 16:32 8
Amrel, в манифесте в тэг application
1
Amrel
9 / 9 / 2
Регистрация: 14.05.2015
Сообщений: 62
29.08.2015, 16:57  [ТС] 9
Цитата Сообщение от YuraAAA Посмотреть сообщение
манифесте в тэг application
Поясните пожалуйста...
Как это реализовать
XML
1
<application android:name=".StatusBur" </application>

XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="org.example.harrix.testbur" >
     <application
        android:name=".StatusBur"
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
</manifest>
или как правильно?
0
Mikalai
264 / 240 / 95
Регистрация: 11.01.2015
Сообщений: 671
29.08.2015, 17:13 10
Amrel, передай контекст в конструктор класса DbNumberMessage.
1
Perfilov
264 / 164 / 56
Регистрация: 25.02.2015
Сообщений: 435
01.09.2015, 04:06 11
DbHelper не статик класс. Значит и без всяких явных передач туда контекстов имеет доступ до родительской активити, а значит может звать ее методы, в том числе и getApplicationContext(). Хз вернет ли активитя нормальный app контекст до момента вызова своего базового метода onCreate, но то, что контекст активити кривой до этого вызова - это точно:


C++
1
2
3
4
5
6
7
8
9
10
void onCreate()
{
   Context appContext = getApplicationContext(); // ??
   Context thisContext = this;  // точно кривой и использовать его нельзя.
 
   super.onCreate();
 
   Context appContext = getApplicationContext(); // ok
   Context thisContext = this;  // ok
}
Если ваши ошибки из-за того, что вы свой хелпер создаете до super.onCreate();, то не делайте так.
Если все же надо именно до super.onCreate();, то попробуйте сперва не this использовать в качестве контекста, а getApplicationContext();, если не поможет - то наверно что-то вроде предложенного тут синглтона надо.
0
01.09.2015, 04:06
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.09.2015, 04:06

Вызов Context из другого класса
Как вызвать Context из класса Output public class MapsActivity extends...

Ошибка при смене Context
Доброго времени суток! Делаю простую рисовалку. При попытке смены контекста...

Можно ли так передавать context?
Не приведет ли это к утечке памяти? public class A{ public static void...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru