2012-06-29 2 views
0

에서 객체 메소드를 호출 할 수 없습니다. 이 방법은 활성의 일부입니다내가이 간단한 SMS 리스너 클래스를 브로드 캐스트 청취자

public void addSMS(String sms_adress, String sms_date, String message) 
{ 
    LayoutParams lparams = new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT); 
    // from Number label 
    TextView from=new TextView(this); 
    from.setLayoutParams(lparams); 
    from.setBackgroundColor(Color.argb(200, 0, 0, 0)); 
    from.setTextAppearance(getApplicationContext(), R.style.from_style); 
    from.setText(this.getString(R.string.label_from_sms)+":"+ sms_adress); 
    linearLayout.addView(from); 
} 

문제가이 라인에있다 : 널이 참조에

TextView from=new TextView(this); 

.

나는 SMS 수신시 SMS가 실행중인 응용 프로그램의 SMS 목록을 업데이트한다는 것을 확인하려고합니다. 그것은 방송 수신기에서 활동 메서드를 호출 할 수없는 것 같습니다. 어느 누구도이 문제를 어떻게 해결할 수 있습니까?

답변

0

당신은 같은 값을 전달하기 위해 다음 의도를 사용하여 활동에 방송 수신기로부터 값을 전달하려는 경우 새 keyword.so를 사용하여 활동을 인스턴스화 할 수 없습니다 :

:

패스 getOriginatingAddress 및 getMessageBody 같은 활동에

하고 활동에

public class ReceiverListener extends BroadcastReceiver 
{ 
List<String> getOriginatingAddresslist = new ArrayList<String>(); 
List<String> getMessageBodylist = new ArrayList<String>(); 
    @Override 
    public void onReceive(Context context, Intent intent) 
    { 
     //---get the SMS message passed in--- 
     Bundle bundle = intent.getExtras();   
     SmsMessage[] msgs = null; 
     String str = "";   
     ReceiverActivity addtolist = new ReceiverActivity(); 
     if (bundle != null) 
     { 
      //---retrieve the SMS message received--- 
      Object[] pdus = (Object[]) bundle.get("pdus"); 
      msgs = new SmsMessage[pdus.length];    
      for (int i=0; i<msgs.length; i++){ 

       msgs[i] = SmsMessage.createFromPdu((byte[])pdus[i]); 
       getOriginatingAddresslist.add(msgs[i].getOriginatingAddress()); 
       getMessageBodylist.add(msgs[i].getMessageBody().toString()); 
      } 
     Intent msgIntent = new Intent(context,YourActivity.class); 
     msgIntent.putStringArrayListExtra("getOriginatingAddresslist", getOriginatingAddresslist); 
     msgIntent.putStringArrayListExtra("getMessageBodylist", getMessageBodylist); 
     startActivity(msgIntent); 
는 다음과 같이 수신 :

public class YourActivity extends MapActivity 
{ 
List<String> getOriginatingAddresslist = new ArrayList<String>(); 
List<String> getMessageBodylist = new ArrayList<String>(); 
    @Override 
    public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     Intent intent = this.getIntent(); 
     getOriginatingAddresslist = intent.getStringArrayListExtra("getOriginatingAddresslist"); 
     getMessageBodylist = intent.getStringArrayListExtra("getMessageBodylist"); 
     for (int i=0; i<getMessageBodylist.size(); i++){ 

       addSMS(getOriginatingAddresslist.get(i).toString(), "now", getMessageBodylist.get(i).toString()); 

      } 

새로운 의도를 처리하기위한 활동은 벌써 우리를 실행하는 경우 EO nNewIntent (Intent intent)

또는

당신은 또한 내가 질문의 종류를 답변 해 드리겠습니다 다시 한번

Custom Intents and Broadcasting with Receivers

+0

실제로 문제는 여기에 없습니다. 청취자의 활동 방법을 호출하는 중입니다. – albanx

+0

어떤 오류가 발생하고 있습니까? –

+0

문맥을 얻는 것에 null 점 execption – albanx

2

를 참조 ReceiverListener에서 활동 가치를 수용하기위한 사용자 방송 수신기를 사용할 수 있습니다 (그리고 나는 소원 내가 가질 때마다 1 달러를 받았다.) ...

ReceiverActivity addtolist = new ReceiverActivity(); 

Activitynew을 사용합니다.

Activity은 Android의 특별한 경우이며 Activity을 확장하는 모든 클래스의 새 인스턴스는 Android OS 자체에서만 만들 수 있습니다. Activity 외부에서 Activity의 데이터 멤버 나 메서드에 액세스하려고 시도하면 안됩니다. 당신이 Activity에 데이터를 전달해야하는 경우

다음 startActivity(...)를 사용하여 시작하고 Intent 엑스트라을 통해 데이터를 전달합니다. 또는 BroadcastReceiverActivity의 내부 클래스로 중첩 할 수 있습니다.

+0

고맙다. 평소와 같이 객체 프로그래밍을하려고했기 때문에 나는 안드로이드에서 beginginer이다. startActivity (...)를 사용하여 활동을 시작하는 방법을 보여주는 예가 아직 시작되지 않은 경우 시도했지만 오류가 발생했습니다. 또한 두 번째 대안을 수행 할 것입니다. +1 (1 달러로 간주) – albanx

관련 문제