Невозможно получить значения базы данных в RemoteView - PullRequest
0 голосов
/ 02 марта 2012

Ну, я хотел создать AppWidget, я определил макеты, информацию для виджета приложения, приемник вещания и сервис для обработки AppWidget.

            AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(this
            .getApplicationContext());
    int[] allWidgetIds = intent
            .getIntArrayExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS);

    ComponentName thisWidget = new ComponentName(getApplicationContext(),
            SmsSchedulerWidget.class);

    RemoteViews remoteViews = new RemoteViews(this.getApplicationContext()
            .getPackageName(), R.layout.schdulesms_appwidget_layout);

    DatabaseManager dbManager = new DatabaseManager(context.getApplicationContext());
    dbManager.open();
    String contactNumber = dbManager.fetchContactNumber();
    String date = dbManager.fetchDate();
    String message = dbManager.fetchMessage();
    String status = dbManager.fetchStatus();

    remoteViews.setTextViewText(R.id.to_appwidget_saved_data, contactNumber);
    remoteViews.setTextViewText(R.id.date_appwidget_saved_data, date);
    remoteViews.setTextViewText(R.id.status_appwidget_saved, message);
    remoteViews.setTextViewText(R.id.message_appwidgset_saved_data, status);

    appWidgetManager.updateAppWidget(thisWidget, remoteViews);

Это мой код .............

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

Ошибки журнала cat:

03-02 17: 26: 32.174: E / AndroidRuntime (32265): ИСКЛЮЧИТЕЛЬНОЕ ИСКЛЮЧЕНИЕ: основное 03-02 17: 26: 32.174: E / AndroidRuntime (32265): java.lang.RuntimeException: невозможно запустить службу com.android.braindigit.schedulesms.appWidgetService@4053da30 с намерением {cmp = com.android.braindigit.schedulesms / .appWidgetService (имеет дополнительные функции)}: java.lang.NullPointerException 03-02 17: 26: 32.174: E / AndroidRuntime (32265): на android.app.ActivityThread.handleServiceArgs (ActivityThread.java:2052) 03-02 17: 26: 32.174: E / AndroidRuntime (32265): на android.app.ActivityThread.access $ 2800 (ActivityThread.java:117) 03-02 17: 26: 32.174: E / AndroidRuntime (32265): на android.app.ActivityThread $ H.handleMessage (ActivityThread.java:994) 03-02 17: 26: 32.174: E / AndroidRuntime (32265): на android.os.Handler.dispatchMessage (Handler.java:99) 03-02 17: 26: 32.174: E / AndroidRuntime (32265): на android.os.Looper.loop (Looper.java:130) 03-02 17: 26: 32.174: E / AndroidRuntime (32265): на android.app.ActivityThread.main (ActivityThread.java:3683) 03-02 17: 26: 32.174: E / AndroidRuntime (32265): в java.lang.reflect.Method.invokeNative (собственный метод) 03-02 17: 26: 32.174: E / AndroidRuntime (32265): на java.lang.reflect.Method.invoke (Method.java:507) 03-02 17: 26: 32.174: E / AndroidRuntime (32265): на com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:839) 03-02 17: 26: 32.174: E / AndroidRuntime (32265): на com.android.internal.os.ZygoteInit.main (ZygoteInit.java:597) 03-02 17: 26: 32.174: E / AndroidRuntime (32265): at dalvik.system.NativeStart.main (собственный метод) 03-02 17: 26: 32.174: E / AndroidRuntime (32265): вызвано: java.lang.NullPointerException 03-02 17: 26: 32.174: E / AndroidRuntime (32265): в android.database.sqlite.SQLiteOpenHelper.getWritableDatabase (SQLiteOpenHelper.java:118) 03-02 17: 26: 32.174: E / AndroidRuntime (32265): в com.android.braindigit.schedulesms.DatabaseManager.open (DatabaseManager.java:36) 03-02 17: 26: 32.174: E / AndroidRuntime (32265): в com.android.braindigit.schedulesms.appWidgetService.onStart (appWidgetService.java:41) 03-02 17: 26: 32.174: E / AndroidRuntime (32265): на android.app.Service.onStartCommand (Service.java:428) 03-02 17: 26: 32.174: E / AndroidRuntime (32265): на android.app.ActivityThread.handleServiceArgs (ActivityThread.java:2039) 03-02 17: 26: 32.174: E / AndroidRuntime (32265): ... еще 10

1 Ответ

0 голосов
/ 05 марта 2012

Ну, я не знаю, насколько правдоподобно отвечать на мой вопрос, но я подумал, что это поможет другим людям, если у них возникнет та же проблема, что и у меня ... Итак, после нескольких часов стука в голову, я наконец понял, чтоЯ передавал нулевой контекст. Итак, я сделал следующие вещи, и это сработало ....

от ресивера широкополосного доступа Я передал следующие намерения своему сервису:

    Intent intent = new Intent(context.getApplicationContext(),appWidgetService.class);
    intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS,allWidgetIds);
    intent.putExtra("contactNumber", contactNumber);
    intent.putExtra("date", date);
    intent.putExtra("message",message);
    intent.putExtra("status", status);
    //update the widgets via the service

ив сервисе я делал следующие вещи:

    String contactNumber = intent.getStringExtra("contactNumber");
    String date = intent.getStringExtra("date");
    String message =intent.getStringExtra("message");
    String status = intent.getStringExtra("status");


    for (int widgetId : allWidgetIds) {
        RemoteViews remoteViews = new RemoteViews(this
                .getApplicationContext().getPackageName(),
                R.layout.schdulesms_appwidget_layout);



        remoteViews.setTextViewText(R.id.to_appwidget_saved_data,
                contactNumber);
        remoteViews.setTextViewText(R.id.date_appwidget_saved_data, date);
        remoteViews.setTextViewText(R.id.status_appwidget_saved, message);
        remoteViews.setTextViewText(R.id.message_appwidgset_saved_data,
                status);

        appWidgetManager.updateAppWidget(thisWidget, remoteViews);
...