Android resource IDs suddenly not final, fields ca

2019-04-24 14:16发布

问题:

I'm working on a new-old project... I'm making it for a different country market, and when i copyed my code from an old project it shows some mistake like MIGRATE ANDROID CODE (As of ADT 14, resource fields cannot be used as switch cases.) This happens for a resourses that are in strings.xml file and for layout. But it doesn't give me some posible fix... how can i fix it???? Here is code:

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

          //Kreira AlertDialog sa dva dugmeta koji ce se pojaviti pri aktiviranju aplikacije
            ad = new AlertDialog.Builder(this).create();
//And HERE
            ad.setTitle(getString(R.string.vasa_trenutna_lokacija));
            //And HERE
ad.setMessage(getString(R.string.da_bi_ste_koristili_aplikaciju));
            //And HERE
            ad.setButton(DialogInterface.BUTTON_POSITIVE, getString(R.string.dozvoli), new DialogInterface.OnClickListener() {

            //Klikom na dugme Dozvoli otvara se novi prozor
            @Override
            public void onClick(DialogInterface ad, int which) {
                Intent i = new Intent(NiskiMerakActivity.this, TrenutnaLokacija.class);             
                startActivity(i);
                finish();
                }
            });

            ad.setButton(DialogInterface.BUTTON_NEGATIVE, getString(R.string.ne_dozvoli),new DialogInterface.OnClickListener() {

            //Klikom na dugme Ne dozvoli aplikacija se zatvara
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    finish();

                }
            });

回答1:

As of ADT 14, resource fields cannot be used as switch cases.

This happened to me too, I got this error even though I wasn't using the R variable in a switch statement. Don't be mislead by the error message. You basically have some error that relates to the R.java file. Make sure you don't import R.java since you should have your own. Delete your R.java file, build project, and see if your R.java file gets generated. If not, you could have an error that is preventing your R.java file from being updated. Try Project > Clean to find any errors. Get rid of the errors and rebuild your project so that your R.java file gets generated and is up-to-date.



回答2:

Quoting http://tools.android.com/tips/non-constant-fields

The solution for this is simple: Convert the switch statement into an if-else statement.

Since your code snippet above does not appear to have a switch() statement, yet your question refers to a switch() statement, I assume you have the wrong code.



回答3:

if your switch-case of the ids is inside a library, sadly the new ADT versions don't support it.

However, you can convert it easily to if-else , as shown on Google's website:

http://tools.android.com/tips/non-constant-fields


回答4:

Probably you just need to Clean your project, i.e. Project -> Clean from the main menu. There should not be errors in the code above. The problem is only with switch statements. Please try to clean and comment here what is the result.



回答5:

I fixed this by changing my import from android.r; to android.R.*;

It cleared all of my errors and i was able to compile my app again.



回答6:

I found it works after changing the import statement for R to include your package name.

For instance:

import android.R;

is now

import com.name.package.R;



回答7:

Today i was facing the same error, my eclipse project have 1 project library added, and i was about to change all the code to if statements, but i realize my project had the library check on, in project ->properties-> android, so i just turn it down and that was the solution to the problem, it also was a suggestion of eclipse itself, reading carefully android migration code adt 14 constants warning for project libraries.



回答8:

Just select in eclipse project -> clean, and the problem was solved. I got this error just by creating a new package in my app and removing it.



回答9:

Here are the steps which helps me to resolve this problem.

  1. Delete R.java (Eclipse will recreate it immediately. If not there is a problem with the code or layout)
  2. Clean the project (Eclipse menu 'Project' & 'Clean'
  3. Recompile the project

These steps resolve the problem with my work.



回答10:

I tried all the approaches mentioned above regarding deleting the generated R.java file, clean, rebuild, etc but that approach did not work for me.

What did work was replacing the case with an else-if chain which was a messy fix in my opinion but I couldn't get it to work any other way.

I'm using Eclipse 4.2.1 and Android SDK 4.2.2