2014-02-27 137 views
0

我得到findViewById錯誤,當我使用它的按鈕。我知道該函數是在Activity類中聲明的,但是如何在不擴展Activity類的情況下實現該函數。我有另一個類擴展了Activity,但是我不能將它用於我的Button Activity,因爲我需要的變量在這個Activity中。findViewById是未定義的類型錯誤

這裏是我的類:

public class Activity_Sec extends BroadcastReceiver{ 
    private static final String LOGCAT = null; 
    Button b1; 
    final SmsManager sms = SmsManager.getDefault(); 
    public void onReceive(Context context, Intent intent) { 
     final Bundle bundle = intent.getExtras(); 
     try { if (bundle != null) { 
      final Object[] pdusObj = (Object[]) bundle.get("pdus"); 
      for (int i = 0; i < pdusObj.length; i++) { 
       final MediaPlayer mp = MediaPlayer.create(context,R.raw.hospital_alarm); 

       SmsMessage currentMessage = SmsMessage.createFromPdu((byte[]) pdusObj[i]); 
        String phoneNumber = currentMessage.getDisplayOriginatingAddress(); 
        String senderNum = phoneNumber; 
        String message = currentMessage.getDisplayMessageBody(); 
       Log.i("SmsReceiver", "senderNum: "+ senderNum + "; message: " + message); 

       int duration = Toast.LENGTH_SHORT; 
       Toast toast = Toast.makeText(context, "senderNum: "+ senderNum + ", message: " + message, duration); 
       toast.show(); 

       String serverNumber= "+9198xxxxxxx"; 
       b1 = (Button)findViewById(R.id.button1); 
       if(senderNum.equals(serverNumber)){ 
        Toast toast1 = Toast.makeText(context,"alert message received!!!!",Toast.LENGTH_LONG); 
        toast1.show(); 
        mp.start(); 
       } 
       b1.setOnClickListener(new OnClickListener(){ public void onClick(View v){ 
        String phoneNumber = "+9198xxxxxxxx"; 
        String message = "Ambulance sent!"; 
        mp.stop(); 
        mp.release(); 
        SmsManager smsManager = SmsManager.getDefault(); 
        smsManager.sendTextMessage(phoneNumber, null, message, null, null); 
       }}); 
      } 
     }} catch (Exception e) { Log.e("SmsReceiver", "Exception smsReceiver" +e); } 
    } 
} 

回答

1

你的類擴展BroadcastReceiverfindViewByIdActivity類的方法。

您可以在活動中註冊BroadCast。然後做一切必要的活動類本身

Activity_Sec sec = new Activity_Sec() 
registerReceiver(broadCastReceiver, new IntentFilter(
     "some Action")); 

你可以讓你BroadCasterReceiver作爲一個內部類Activity類的

您可以註銷在

或者

您可以使用一個界面作爲回調的活動

使用EventBus

https://github.com/greenrobot/EventBus

public interface BReceiver { 

public void returnData(String value); // note type is string 

} 

中的onReceive

BReceiver br = (BReceiver) context; 

然後

br.returnData("your string data") 

然後終於在你的活動實現的接口。

public class MainActivity extends Activity implements BReceiver{ 

@Override 
public void returnData(String value) { 
    // TODO Auto-generated method stub 

} 
0

把ID成束,並從那裏

+0

如果我這樣做,它說,該型廣播接收器不能Activity_Sec的超接口;一個超級接口必須是一個接口。 – user3359953

0

我的建議是使用它:拿出所有的東西OnClickListener。只需聲明一個處理函數來實現正確的接口並將其鏈接到XML中。

public void handleAmbulanceClick(View v) { 
    // ... what's in onClick now ... 
} 

然後,在你的佈局/ your_activity.XML文件:

<Button 
    android:id="@+id/button1" 
    ... your other atttributes ... 
    android:doClick="handleAmbulanceClick" /> 
+0

它仍然說該方法findViewById(int)未定義類型和handleAmbulanceClick無法解析爲一個類型。 – user3359953

+0

我認爲http://stackoverflow.com/users/653856/raghunandan已經確定了答案:你應該讓你的課程成爲一個活動。 – Sparky

相關問題