Generowanie R.java, a poprawność XML

0

Uczę się Javy, a dokładniej pisania na Androida i trafiłem na taki mały spory problem. Otóż nie mogę skompilować pliku przez coś zwanego R.java. W niewyjaśnionych okolicznościach kompilator wywala tam ciągle jakieś błędy. Program pisałem opierając się na jednym z tutoriali, dokonałem co prawda sporo modyfikacji, ale to nie tutaj wywala mi błędy. Jest tego sporo na Googlach - wiem. Ale próbowałem już wszystkiego, zmniejszałem litery z uppercase, usuwałem plik R.java i czyściłem projekt - nic nie pomagało. Nadal wyskakują błędy, albo "<zmienna> cannot be resolved or is no field", albo informacje o braku R. Czytałem, że plik ten jest generowany automatycznie, więc można go łatwo zepsuć popełniając błąd w XML. Ja XML jeszcze nie znam i dosyć ciężko mi znaleźć błąd, dlatego proszę o pomoc :). To jest mi sprawdzić najciężej, więc jeśli wszystko będzie OK to błędu szukał będę w innym miejscu.

A jakby ktoś znał jeszcze jakieś rozwiązanie to byłbym wdzięczny za pomoc (piszę w Eclipse).

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.gpstracking"
    android:versionCode="1"
    android:versionName="1.0" >
 
    <uses-sdk android:minSdkVersion="8" />
 
    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" >
        <activity
            android:name=".androidgpstrackingactivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
 
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
     
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />    
    <uses-permission android:name="android.permission.INTERNET" />
 
</manifest>
1

No to mały, czy spory? Zdecyduj się :D. Plik wygląda w porządku. Plików w paczce gen NIE WOLNO modyfikować. Najlepiej nawet ich nie otwierać. Po pierwsze: sprawdź czy masz w klasach (ale tych co ty napisałeś, tzn. w paczce src) zaimportowany plik R. Jeżeli tak to usuń te importy. Potem spróbuj wyczyścić projekt. Po drugie przeczytaj dokładnie jakie błędy występują. Możliwe że któryś z layoutów ma w sobie błąd (jeżeli tak to wywali Ci 300 błędów albo i więcej, więc czasami trzeba się troche naszukać, jest to najszczęstsza przyczyna). Całkiem możliwe, że poprzez modyfikacje tak rozwaliłeś projekt, że nic go już nie uratuje. Niestety android (i eclipse) pełne są "kruczków" i tylko doświadczony programista androida jest w zasadzie stwierdzić co jest nie tak (nie ma dobrego komunikowania o błędach, ide też lubi się czasami pogubić (mnie się zdarzają sytuacje gdzie eclipse po prostu za mną nie nadąża). Po trzecie: jeżeli dopiero poznajesz jave to sugeruje odpuszczenie androida na jakiś czas. Bez dobrej (nie gruntownej,ale dobrej) znajomości javy i tego jak ona działa, niestety wiele w androidzie nie zrobisz.

Ps. XML to podstawa, więc nie staraj się go unikać (ja tak robiłem na początku), a raczej do niego przyzwyczajać.

0

Problem niby mały, ale sporo psuje :).
Dzięki za zasugerowanie, że cały projekt mógł się zepsuć, bo właśnie tak było. Stworzyłem nowy i teraz z kilkunastu błędów zeszło do tylko jednego. Jednak wywaliło mi w tym samym miejscu ten sam błąd, tylko nie odnoszący się już do R, a do id.

btnshowlocation = (Button) findViewById(R.id.btnshowlocation);

Treść błędu:
btnshowlocation cannot be resolved or is not a field
Wyczytałem, że findViewById(); wyszukuje dane z pliku id. czyli chyba też generowanego, więc w sumie problem ten sam tylko w pliku innym.
Może faktycznie powinienem sobie odpuścić Androida. W sumie to znam (oczywiście w rozsądnych granicach) C++ i podszedłem do Javy jakby to był bardzo prosty język. No bo niby jest, większość kodu rozumiem, a tego czego nie rozumiem to sobie doczytam w dokumentacji, ale chyba faktycznie powinienem jednak najpierw bardziej skupić się na niej, bo trochę przyzwyczajeń z C++ mimo wszystko pozostaje. Tak po prostu chciałem się oderwać od C++ :).

0

Ten błąd mówi o tym, że po prostu nie zadeklarowałeś zmiennej Button. Tzn. Button powinno być przed btnshowlocation, albo jako pole klasy <modyfikator_dostępu> Buton btnshowlocation; . Co do samej nauki to pewnie, że warto. Jeżeli jesteś zaznajomiony z C++ to przejście na Jave długo Ci nie zajmie (zero zabawy ze wskaźnikami i referencjami i "dekorowania" kodu milionami const).

0

Tylko właśnie problem jest taki, że na samym początku mam zadeklarowane Button btnshowlocation; Nawet teraz sprawdziłem, czy gdzieś literówki nie zrobiłem, ale nie - wszystko się zgadza. Tak, żeby uściślić to błąd podkreśla w parametrze funkcji jako btnshowlocation.

1

http://SSCCE.org czyli w skrócie wklej kod, który generuje błąd
po drugie to twój manifest powinien wyglądać tak :

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.gpstracking"
    android:versionCode="1"
    android:versionName="1.0" >
 
    <uses-sdk android:minSdkVersion="8" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />    
    <uses-permission android:name="android.permission.INTERNET" />

    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" >
        <activity
            android:name=".androidgpstrackingactivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
 
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
</manifest>

czyli uses-permission przed <application>
Co do generowania pliku R.java - eclipsowi tutaj czasem odpierdala, miałem 2 instalacje eclipse'a, jeden na windowsie, drugi na linuksie. WIndowsowego eclipse'a zapdejtowałem i po wyczyszczeniu projektu przestało mi generować R.java. Przeszukałem cały projekt kilkukrotnie pod kątem błędów w xmlu, pół dnia przesiedziałęm na necie szukając możliwych rozwiązań, a okazało się, że to eclipse strzelil focha. zimportowałem projekt na linuksie, R.java wygenerował się bez problemu. Co śmieszniejsze, bład na windowsie sam się naprawił po pewnym czasie bez ingerencji

0
public class androidgpstrackingactivity extends Activity
{
   Button btnshowlocation;
   gpstracker gps;

   @Override
   public void onCreate(Bundle savedInstanceState) 
   {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);
 
      btnshowlocation = (Button) findViewById(R.id.btnshowlocation);
      btnshowlocation.setOnClickListener(new View.OnClickListener()
      {
         @Override
         public void onClick(View arg0)
         {
            // create class object
            gps = new gpstracker(androidgpstrackingactivity.this);
 
            // check if GPS enabled     
            if(gps.canGetLocation())
            {                     
               double latitude = gps.getLatitude();
               double longitude = gps.getLongitiude();
                     
               Toast.makeText(getApplicationContext(), "Your Location is - \nLat: " + latitude + "\nLong: " + 
                                                       longitude, Toast.LENGTH_LONG).show();    
            }
            else
            {
               gps.showSettingsAlert();
            }                 
         }
      });
   }

   @Override
   public boolean onCreateOptionsMenu(Menu menu) 
   {
      getMenuInflater().inflate(R.menu.main, menu);
      return true;
   }
}

To jest oczywiście kod activity, bo tylko tam wywala mi błąd/błędy.

EDIT:
Haha faktycznie użytkownik @mychal dobrze zauważył. Tutaj właśnie wychodzi moja nieznajomość XML. W dokumentacji poczytałem i wystarczyło dodać

 <Button android:id="@+id/btnshowlocation"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"/>

i wszystko działa. No prawie wszystko, bo aplikacja się wysypuje, ale to już nie problem i do tego sam dojdę :). Dzięki! Bo już traciłem wiarę w te kompilatory/IDE.

1 użytkowników online, w tym zalogowanych: 0, gości: 1