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

onCreate() ではなく、onResume() メソッドでブロードキャスト レシーバーを登録する必要があります。そして 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 に答える