0

I have already declared the R into a variable. However, the error still remains there. I cleaned the project and restarted it but nothing changed. Im a beginner to eclipse android coding. Can someone help me out with the R variable?

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
    check if there is any errors in resource files – Raghunandan Oct 24 '13 at 04:45
  • Update your sdk tools to the latest version too. – Ye Lin Aung Oct 24 '13 at 04:47
  • You are using the names of your class varialbes: Button btnSendSMS; R.id.btnSendSMS Did you also give that button the same id name in the xml file, like: android:id="@+id/btnSendSMS" – Rick Falck Oct 24 '13 at 04:49
  • Clean your project & Restart your Eclipse. if the problem still exist, then update your SDK tools – chhameed Oct 24 '13 at 04:50
  • R error usually occurs if there is something wrong in your resource file, usually some mistake in the xml files. Check each file thoroughly and you will find the mistake. Then just clean the project and you are good to go. – Rohan Kandwal Oct 24 '13 at 04:51
  • remove import com.example.smsmessaging.R; and then clean your project – Rohan Kandwal Oct 24 '13 at 04:57
  • My xml file is free from errors and after removing the "import com.example.smsmessaging.R;" the R indications are still there after cleaning and restarting the project. – user2889611 Oct 24 '13 at 05:12
  • Moreover, "public class SMS extends Activity" the SMS error states that the public type must be defined – user2889611 Oct 24 '13 at 05:13

4 Answers4

3

Remove line import com.example.smsmessaging.R; We should not import it in our .java.

Kapil
  • 1,790
  • 1
  • 16
  • 32
  • 1
    why is that you should not import – Raghunandan Oct 24 '13 at 04:58
  • the R is still not a variable after removing it. – user2889611 Oct 24 '13 at 05:17
  • you clean the project which will rebuild your resource(R) file and then you don't need to import R. – Kapil Oct 24 '13 at 05:55
  • Check this thread: http://stackoverflow.com/questions/15309941/import-android-r-in-eclipse-why – Kapil Oct 24 '13 at 05:55
  • Thank you for the info. I just removed the R import. However, the main cannot be resolved now:( Do i need to include anything in my xml file? – user2889611 Oct 24 '13 at 13:27
  • you need to make sure that there is no error at all in your xml file. If any error is there then eclipse will not execute you xml file and your component(edit text or image) will not registered in R file. Now if you will try to access it in your .java file then it will not be accessible and eclipse will ask you to import R file. Once you make your xml file error free then clean your project and build it once again. – Kapil Oct 25 '13 at 12:41
  • If it is still now solved then plz past your java file and xml file here. we will help you. – Kapil Oct 25 '13 at 12:43
  • I've posted the xml file:) Thank you – user2889611 Oct 29 '13 at 05:42
1

Once check your imports and remove unused import in your code:
This line: import com.example.smsmessaging.R;
Then organize imports -> Ctrl+Shift+O

Thats it...

Ilya
  • 29,135
  • 19
  • 110
  • 158
Shailendra Madda
  • 20,649
  • 15
  • 100
  • 138
0

First Remove tour R.java file form gen folder. Now clean your project and import android.R;

Alternate import can be done by pressing Ctrl+Shift+O

Gajendra Rawat
  • 3,673
  • 2
  • 19
  • 36
  • R can be resolved now. But the main isn't. And "public class SMS extends Activity" the SMS error states that the public type must be defined :(( – user2889611 Oct 24 '13 at 06:57
0

You shouldn't import R or define it as a variable. Quoting from http://source.android.com/source/using-eclipse.html:

Note: Eclipse sometimes likes to add an import android.R statement at the top of your files > that use resources, especially when you ask eclipse to sort or otherwise manage imports. > This will cause your make to break. Look out for these erroneous import statements and delete them.

If there is no error in your resource xml files, then R should automatically be available. XML issues are usually reported in Eclipse. If you're not able to figure out the error, post your xml files here.

battery
  • 502
  • 6
  • 26