2013-05-30 2 views
0

시나리오 :방송 수신 오류

나는 다음과 같은 코드

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

으로 그리고 MainActivity에 조각에서 방송을 보내고, 나는에서 onCreate 내부가

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

     write(newBalance); 
    } 
}; 

를 수신하고(), 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 : 오류 후

, 쓰기() 메소드가 실제로 호출하고 그 기능을 수행 얻을, 다음 그림을 참조하십시오. 문제는 고객이 추한 앱 충돌 메시지를보기 싫어한다는 것입니다. !! enter image description here

+0

MainActivity의 450 행은 무엇입니까? –

+1

write() 메소드 게시 – stinepike

+0

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

답변

0

브로드 캐스트 수신기는 onCreate()가 아니라 onResume() 메서드에 등록해야합니다. 그리고 onPause() 메서드에서 등록을 등록 취소하십시오. 귀하의 스크린 샷 (내 직장에서 차단)을 볼 수 없지만 이것이 현재 문제가 아니더라도 곧 문제가 될 것입니다. 다음과 같아야합니다

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

onPause() :

은 onResume()에 등록 수신기 코드를 이동

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이 null이라는 것입니다. 제대로 초기화했는지 확인하십시오.