Robię aplikację w Android Studio:

public class MainActivity extends AppCompatActivity {

    SharedPreferences sharedPreferences;
    EditText noteTitleField, noteContentField;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        sharedPreferences = getSharedPreferences("NoteAppPrefs", Context.MODE_PRIVATE);
        String setValueInPrefs = sharedPreferences.getString("alreadyLaunched", null);
        try (setValueInPrefs.equals("0")) {
            Log.d("debugging", "App running for first time... launching setup");
            setupForFirstTime();
        } catch (NullPointerException e) {
            noteContentField = findViewById(R.id.noteContentTextBox);
            noteTitleField = findViewById(R.id.noteTitleTextBox);
            Toast.makeText(MainActivity.this, R.string.welcomeMessage, Toast.LENGTH_LONG);
        }
    }
}

Jednak dostaję "Referencje zasobów nie są obsługiwane na poziomie języka 8".

Sprawdziłem kilka wątków takich jak ta Intellij Funkcja (...) nie jest obsługiwana na tym poziomie języka. Nie mogę się skompilować, aby dowiedzieć się, skąd może pochodzić błąd, ale sprawdziłem zarówno projektu JDK Versions i Android Studio JRE i pasują do "Java w wersji 1.8"

Dziękuję za pomoc

0
ScarySneer 13 luty 2021, 23:02

1 odpowiedź

Najlepsza odpowiedź

Linia

try (setValueInPrefs.equals("0")) {

Nie jest poprawny. W Java 8 Kod kodu w nawiasach musi być instrukcją przypisania (VariableDeclaratorId = Expression) i

Typ zmiennej zadeklarowanej w specyfikacji zasobów musi być podtypem autoklozją lub wystąpi błąd kompilacji.

Java 9 Zrelaksował część z oświadczeniem przydziału (teraz może być również zmienna lub pole), ale nadal

Typ zmiennej zadeklarowany lub określany jako zasób w specyfikacji zasobów musi być podtypem autoklowalnym lub wystąpi błąd kompilacji.

Używasz setValueInPrefs.equals("0") jako wyrażenie, co powoduje wartość boolowską, a boolean nie jest podtypem autoklosowalnym.

Aby to naprawić, należy wymienić blok try

    if (setValueInPrefs != null) {
        if (setValueInPrefs.equals("0")) {
            Log.d("debugging", "App running for first time... launching setup");
            setupForFirstTime();
        }
    } else {
        noteContentField = findViewById(R.id.noteContentTextBox);
        noteTitleField = findViewById(R.id.noteTitleTextBox);
        Toast.makeText(MainActivity.this, R.string.welcomeMessage, Toast.LENGTH_LONG);
    }
1
Thomas Kläger 14 luty 2021, 08:24