收到通知时为什么我有SQLite空指针?

时间:2016-06-15 12:44:05

标签: android sqlite push-notification

我正在构建一个使用Firebase通知的应用。我希望,在收到通知时,将该通知保存在本地存储(SQLite)中。但是当我想从该数据库中读取它时,它会向我发送空指针。我的错误在哪里?

这是我的DataBaseHelper类:

public class myFirebaseMessagingService extends FirebaseMessagingService {

private static final String TAG="MyFirebaseMsgService";
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
    super.onMessageReceived(remoteMessage);
    Log.d("onMessageReceived", "Pozvana funkcija onMessageReceived");
    Log.d(TAG, "From " + remoteMessage.getFrom());
    Log.d(TAG, "Body " + remoteMessage.getNotification().getBody());
    Log.d(TAG, "Location " + remoteMessage.getNotification().getClickAction());
    Log.d(TAG, "Value " + remoteMessage.getData().get("click_action"));
    sendNotification(remoteMessage);
    Log.d("Function called", "sendNotification");
    String message=remoteMessage.getNotification().getBody();
    Log.d("baza", message);
    DataBaseHelper db=new DataBaseHelper(this);
    db.insertMsg(message);


}

private void sendNotification(RemoteMessage remoteMessage) {
    Intent intent = new Intent(myFirebaseMessagingService.this, MainActivity.class);
    intent.putExtra("click_action", "goToFragment1");
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_ONE_SHOT);
    Uri defaultSoundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
    NotificationCompat.Builder notification=new NotificationCompat.Builder(this)
            .setSmallIcon(logo)
            .setContentText(remoteMessage.getNotification().getBody())
            .setContentTitle("Title")
            .setAutoCancel(true)
            .setSound(defaultSoundUri)
            .setContentIntent(pendingIntent);
    NotificationManager notificationManager = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
    notificationManager.notify(0, notification.build());
}

这是myFirebaseMessagingService:

public class MainActivity extends AppCompatActivity {
Button dugme, dugme2, dugme3;
Cursor c;
DataBaseHelper db;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Log.d("onCreate", "ONCREATE");
    final Intent intent=getIntent();
    setContentView(R.layout.activity_main);
    String msg = getIntent().getStringExtra("click_action");
    FragmentManager fragmentManager = getSupportFragmentManager();
    FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();


    if (msg != null) {
        if (msg.equals("goToFragment1")) {
            Fragment1 fragment1 = new Fragment1();
            fragmentTransaction.replace(R.id.myFragment, fragment1);
            Log.d("FragmentTransaction", "Fragment je promenjen u onCreate!");
            fragmentTransaction.commit();
            Log.d("Create", "Kraj onCreatea");
        }
    }

    dugme = (Button) findViewById(R.id.dugme1);
    dugme2 = (Button) findViewById(R.id.subscribe);
    dugme.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Fragment fragment = null;
            if (view == dugme) {
                fragment = new Fragment1();
            }
            FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
            transaction.replace(R.id.myFragment, fragment);
            transaction.addToBackStack(null);
            transaction.setTransition(FragmentTransaction.TRANSIT_NONE);
            transaction.commit();
        }
    });


    dugme2.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            FirebaseMessaging.getInstance().subscribeToTopic("android");
            Log.d("Log", "Uspesno ste se pretplatili");
        }
    });
    try{
    c=db.query("Messages", null, null, null, null, null);
    if(c.moveToFirst()){

        do{
            Toast.makeText(MainActivity.this, "id: " + c.getString(0) + "IME: " + c.getString(1), Toast.LENGTH_LONG).show();
        }
        while(c.moveToNext());{

        }


    }}catch (Exception e){
        throw new Error("Greska!");
    }

这是我的MainActivity:

06-15 14:36:26.354 29325-29325/com.example.dev3.notifikacijefragmenti E/AndroidRuntime: FATAL EXCEPTION: main
                                                                                    java.lang.Error: Greska!
                                                                                        at com.example.dev3.notifikacijefragmenti.MainActivity.onCreate(MainActivity.java:82)
                                                                                        at android.app.Activity.performCreate(Activity.java)
                                                                                        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java)
                                                                                        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java)
                                                                                        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java)
                                                                                        at android.app.ActivityThread.access$700(ActivityThread.java)
                                                                                        at android.app.ActivityThread$H.handleMessage(ActivityThread.java)
                                                                                        at android.os.Handler.dispatchMessage(Handler.java)
                                                                                        at android.os.Looper.loop(Looper.java)
                                                                                        at android.app.ActivityThread.main(ActivityThread.java)
                                                                                        at java.lang.reflect.Method.invokeNative(Native Method)
                                                                                        at java.lang.reflect.Method.invoke(Method.java:525)
                                                                                        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java)
                                                                                        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java)
                                                                                        at dalvik.system.NativeStart.main(Native Method)

这是我的logcat:

def find_dict_diffs(dict1, dict2):
    unequal_keys = []
    unequal_keys.extend(set(dict1.keys()).symmetric_difference(set(dict2.keys())))
    for k in dict1.keys():
        if dict1.get(k, 'N\A') != dict2.get(k, 'N\A'):
            unequal_keys.append(k)
    if unequal_keys:
        print 'param', 'dict1\t', 'dict2'
        for k in set(unequal_keys):
            print str(k)+'\t'+dict1.get(k, 'N\A')+'\t '+dict2.get(k, 'N\A')
    else:
        print 'Dicts are equal'

dict1 = {1:'a', 2:'b', 3:'c', 4:'d', 5:'e'}
dict2 = {1:'b', 2:'a', 3:'c', 4:'d', 6:'f'}

find_dict_diffs(dict1, dict2)

任何人都可以帮助我吗?

1 个答案:

答案 0 :(得分:0)

问题是您从未在DataBaseHelper中实例化MainActivity课程。

当您尝试拨打以下电话时:

c=db.query("Messages", null, null, null, null, null);

db仍为null

onCreate()中添加以下行:

db = new DataBaseHelper();