2013-10-24 30 views
0

我已經將R聲明爲變量。但是,錯誤仍然存​​在。我清理了這個項目並重啓了它,但沒有任何改變。我是一個初學者,以消除android編碼。有人可以幫助我與R變量?R無法在聲明後解析爲變量

Main.java

package com.example.smsmessaging; 
import com.example.smsmessaging.R; 
import android.app.Activity; 
import android.app.PendingIntent; 
import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.content.IntentFilter; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.Toast; 
import android.telephony.gsm.SmsManager; 


public class SMS extends Activity 
{ 

Button btnSendSMS; 
EditText txtPhoneNo; 
EditText txtMessage; 


@Override 
public void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main);   

    btnSendSMS = (Button) findViewById(R.id.btnSendSMS); 
    txtPhoneNo = (EditText) findViewById(R.id.txtPhoneNo); 
    txtMessage = (EditText) findViewById(R.id.txtMessage); 

    btnSendSMS.setOnClickListener(new View.OnClickListener() 
    { 
     public void onClick(View v) 
     {     
      String phoneNo = txtPhoneNo.getText().toString(); 
      String message = txtMessage.getText().toString();     
      if (phoneNo.length()>0 && message.length()>0)     
       sendSMS(phoneNo, message);     
      else 
       Toast.makeText(getBaseContext(), 
        "Please enter both phone number and message.", 
        Toast.LENGTH_SHORT).show(); 
     } 
    });   
}  
public class SMS extends Activity 
{ 
    //... 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) 
    { 
     //... 
    } 

    //---sends an SMS message to another device--- 
    private void sendSMS(String phoneNumber, String message) 
    {   
     PendingIntent pi = PendingIntent.getActivity(this, 0, 
      new Intent(this, SMS.class), 0);     
     SmsManager sms = SmsManager.getDefault(); 
     sms.sendTextMessage(phoneNumber, null, message, pi, null);   
    }  
    } 
    //---sends an SMS message to another device--- 
    private void sendSMS(String phoneNumber, String message) 
    {   
    String SENT = "SMS_SENT"; 
    String DELIVERED = "SMS_DELIVERED"; 

    PendingIntent sentPI = PendingIntent.getBroadcast(this, 0, 
     new Intent(SENT), 0); 

    PendingIntent deliveredPI = PendingIntent.getBroadcast(this, 0, 
     new Intent(DELIVERED), 0); 

    //---when the SMS has been sent--- 
    registerReceiver(new BroadcastReceiver(){ 
     @Override 
     public void onReceive(Context arg0, Intent arg1) { 
      switch (getResultCode()) 
      { 
       case Activity.RESULT_OK: 
        Toast.makeText(getBaseContext(), "SMS sent", 
          Toast.LENGTH_SHORT).show(); 
        break; 
       case SmsManager.RESULT_ERROR_GENERIC_FAILURE: 
        Toast.makeText(getBaseContext(), "Generic failure", 
          Toast.LENGTH_SHORT).show(); 
        break; 
       case SmsManager.RESULT_ERROR_NO_SERVICE: 
        Toast.makeText(getBaseContext(), "No service", 
          Toast.LENGTH_SHORT).show(); 
        break; 
       case SmsManager.RESULT_ERROR_NULL_PDU: 
        Toast.makeText(getBaseContext(), "Null PDU", 
          Toast.LENGTH_SHORT).show(); 
        break; 
       case SmsManager.RESULT_ERROR_RADIO_OFF: 
        Toast.makeText(getBaseContext(), "Radio off", 
          Toast.LENGTH_SHORT).show(); 
        break; 
      } 
     } 
    }, new IntentFilter(SENT)); 

    //---when the SMS has been delivered--- 
    registerReceiver(new BroadcastReceiver(){ 
     @Override 
     public void onReceive(Context arg0, Intent arg1) { 
      switch (getResultCode()) 
      { 
       case Activity.RESULT_OK: 
        Toast.makeText(getBaseContext(), "SMS delivered", 
          Toast.LENGTH_SHORT).show(); 
        break; 
       case Activity.RESULT_CANCELED: 
        Toast.makeText(getBaseContext(), "SMS not delivered", 
          Toast.LENGTH_SHORT).show(); 
        break;       
      } 
     } 
    }, new IntentFilter(DELIVERED));   

    SmsManager sms = SmsManager.getDefault(); 
    sms.sendTextMessage(phoneNumber, null, message, sentPI, deliveredPI);   
    } 

XML:

<receiver android:name=".SmsReceiver"> 
     <intent-filter> 
      <action android:name= 
       "android.provider.Telephony.SMS_RECEIVED" /> 
     </intent-filter> 
    </receiver> 

</application> 
<uses-permission android:name="android.permission.SEND_SMS"> 
</uses-permission> 
<uses-permission android:name="android.permission.RECEIVE_SMS"> 
</uses-permission> 
</manifest> 
+1

檢查資源文件是否有錯誤 – Raghunandan

+0

將您的sdk工具更新到最新版本。 –

+0

您正在使用類別變量的名稱: Button btnSendSMS; R.id.btnSendSMS 你也給該按鈕同樣的ID名稱在XML文件中,如: 機器人:ID = 「@ + ID/btnSendSMS」 –

回答

1

一旦檢查進口並在代碼中刪除未使用的導入:
此行:import com.example.smsmessaging.R;
再組織進口 - >按Ctrl ++Ø

完蛋了......

+0

我已經刪除了該行,但R仍然未解析爲變量。 – user2889611

+0

並檢查您的所有XML文件是否有任何錯誤,可以解決您的問題。 –

+0

謝謝,但我的XML文件沒有錯誤:( – user2889611

3

刪除線進口com.example.smsmessaging.R;我們不應該在我們的.java中導入它。

+1

爲什麼不應該導入 – Raghunandan

+0

R在移除後仍不是變量 – user2889611

+0

您清理該項目將重建您的資源(R)文件,然後您不需要導入R. – Aditya

0

首先刪除遊覽R.java文件格式gen文件夾。現在清理你的項目並導入android.R;

替代進口可以通過按Ctrl + Shift + O

+0

R現在可以解決。但主要不是。和「公共類SMS擴展活動」短信錯誤指出,公共類型必須定義:(( – user2889611

0

你不應該導入R或將它定義爲一個變量來實現。 從http://source.android.com/source/using-eclipse.html報價:

注:Eclipse中有時喜歡在你的文件的頂部添加一個導入android.R聲明>是利用資源,尤其是當你問蝕進行排序或管理進口。 >這會導致你的製造中斷。注意這些錯誤的導入語句並刪除它們。

如果您的資源xml文件中沒有錯誤,則R應自動可用。 XML問題通常在Eclipse中報告。如果您無法找出錯誤,請在此處發佈您的xml文件。

+0

謝謝!但現在主要不解析爲變量 – user2889611

+0

是的,原因是有一個如果你可以發佈這些,那麼這裏的某個人可能會對此有更好的評論 – battery

+0

我剛剛更新了xml :) – user2889611