0

设想:

我正在使用以下代码从片段发送广播

Intent intent=new Intent();
                    intent.setAction("writeBalanceToNFCCard");
                    intent.putExtra("balance", Double.valueOf(result));
                    getActivity().sendBroadcast(intent);

在 MainActivity 中,我收到了

private final BroadcastReceiver mReceiverWriteNFC=new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        double newBalance = intent.getDoubleExtra("balance", 0);

        write(newBalance);
    }
};

在 MainActivity 的 onCreate() 中,我正在注册

 IntentFilter writeNFCFilter=new IntentFilter("writeBalanceToNFCCard");

   registerReceiver(mReceiverWriteNFC, writeNFCFilter);

问题:它有时会工作....在此处输入图像描述有时我会收到以下错误

我究竟做错了什么???

编辑:这是写方法

private void write(double newBalance) {
    Log.d(TAG, "Write to tag");

        //to display new balance on homefragment.
        SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
        SharedPreferences.Editor editor = settings.edit();
            editor.putString("newbalance",String.valueOf(newBalance));
            editor.commit();

            paymentData=new MyPaymentData();
        paymentData.setUid(operations.getUid());
        paymentData.setCurrency("dkk");
        paymentData.setAmount(newBalance);
        Log.d(TAG,"WRITE NFC: BALANCE="+ String.valueOf(newBalance));

        byte[] bytes = encodePayload(paymentData);
        byte[] encrypted = encrypt(bytes);

        new WriteTask().execute(encrypted,bytes);

}

编辑2:

出现错误后,见下图,write() 方法实际上被调用并执行其功能。问题是客户绝对不喜欢看到丑陋的应用程序崩溃消息..!! 在此处输入图像描述

4

2 回答 2

0

您应该在 onResume() 方法中注册广播接收器,而不是 onCreate()。并在 onPause() 方法中取消注册它们。我看不到你的截图(我的工作场所被屏蔽了),但即使这不是当前的问题,它很快就会出现问题。

将注册接收者代码移至 onResume():

protected void onResume () {
    super.onResume();
    IntentFilter writeNFCFilter=new IntentFilter("writeBalanceToNFCCard");
    registerReceiver(mReceiverWriteNFC, writeNFCFilter);
}

onPause() 应该如下所示:

protected void onPause () {
    unregisterReceiver(mReceiverWriteNFC);
    super.onPause();
}
于 2013-05-30T12:59:16.310 回答
0

问题似乎在这一行

paymentData.setUid(operations.getUid());

如果是这样,那么唯一的原因是operations为空。请检查您是否正确初始化它。

于 2013-05-30T13:03:16.863 回答