2013-05-30 101 views
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); 
    } 
}; 

中的onCreate内()的MainActivity,我注册了

IntentFilter writeNFCFilter=new IntentFilter("writeBalanceToNFCCard"); 

    registerReceiver(mReceiverWriteNFC, writeNFCFilter); 

问题: 它的工作原理有时....一个enter image description hereð有时我得到以下错误

我在做什么错???

编辑: 这是写方法

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()方法实际上被调用并执行其功能。问题是客户绝对不会喜欢看到一个丑陋的应用程序崩溃消息..! enter image description here

+0

MainActivity的第450行是什么? –

+1

发布您的write()方法 – stinepike

+0

line 450:paymentData.setUid(operations.getUid()); – kandroid

回答

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(); 
} 
+0

它现在不调用write() – kandroid

+0

如果你实现了这个,我忘记了在eonResume()方法中调用super.onResume()方法(见上面,现在固定)。抱歉! – Phil

+0

Nop ....广播onReceive从不叫 – kandroid

0

问题似乎在这条线

paymentData.setUid(operations.getUid()); 

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