2013-04-16 6 views
5

Byłem stara się uzyskać przykład działa od dołu:Google App Engine Java i Android Pierwsze kroki

https://developers.google.com/eclipse/docs/getting_started

Pierwszy problem miałem był nie został zainstalowany „Google Cloud Messaging dla Androida Biblioteka "w Android SDK (oczywiste, że wiem).

Ale teraz mam problem z auto-wygenerowany kod w dwóch plików w projekcie Android: GCMIntentService.java i RegisterActivity.java

błędy są:

  • Sposób getDeviceInfo (String) jest niezdefiniowany dla typu Deviceinfoendpoint GCMIntentService.java
  • Metoda listWiadomości() jest niezdefiniowana dla typu MessageEndpoint RegisterActivity.java
  • Metoda insertDeviceIn fo (DeviceInfo) nie jest zdefiniowana dla danego typu Deviceinfoendpoint GCMIntentService.java
  • Sposób removeDeviceInfo (String) jest niezdefiniowana dla danego typu Deviceinfoendpoint GCMIntentService.java

Używam Java SDK v1.7.0_15 na Ubuntu ale Próbowałem również na Windows 7 z Java SDK v1.6 i miał ten sam problem. Najnowsza platforma Android 4.2.2 i Google App Engine 1.7.7. Eclipse to Juno Service Release 2.

Problem wygląda na nieprawidłowy odlew, ponieważ istnieje metoda getDeviceInfo dla wewnętrznej klasy DeviceInfoEndpoint wewnątrz Deviceinfoendpoint (różne capatilisations).

Mogę spróbować to naprawić, ale zastanawiam się, czy mam coś nie tak w mojej konfiguracji, żeby to się stało?

Każda pomoc zostanie doceniona.

+0

Twój problem dotyczy projektu aplikacji lub projektu aplikacji? Czy możesz opublikować ślad stosu dla tych błędów? –

+0

Problem dotyczy projektu aplikacji. Nie ma śledzenia stosu, ponieważ nie będzie on jeszcze kompilowany. – reubenb87

+0

Wczoraj wieczorem zmagał się z tym samym problemem. Próbowano również z dwoma różnymi maszynami z różnymi konfiguracjami oprogramowania. – Heigo

Odpowiedz

3

W swojej klasie GCMIntentService.java, dodać .deviceInfoEndpoint() po obiekcie punktu końcowego w liniach z błędami, jak pokazano poniżej:

DeviceInfo existingInfo = endpoint.getDeviceInfo(registration) 
DeviceInfo existingInfo = endpoint.deviceInfoEndpoint().getDeviceInfo(registration) 

W RegisterActivity.java zmiany linii

messageEndpoint.listMessages().setLimit(5).execute(); 

t o

+0

Dziękuję bardzo!W takim razie musi to być jakiś błąd w ich autorskiej generacji. – reubenb87

+0

Bez problemu. Ale czy rzeczywiście udało ci się uruchomić przykładowy projekt? Uruchomiłem aplikację na Androida i zarejestrowałem się dobrze, ale w zapleczu nie było żadnych urządzeń. – Heigo

2

Upewnię się, że używasz tej samej wersji interfejsów API GCM, do których masz pliki JAR. Było sporo rewizji.

Korzystam z następującego kodu z gcm-server.jar, wymienione na 19718 bajtów.

Kod z powodzeniem używać do wysyłania wiadomości GCM do urządzenia jest:

public void sendMessage() { 
    String notificationToken = mobileDevice.getPushNotificationCode(); 
    String deviceType = mobileDevice.getDeviceType(); 

    Sender sender = new Sender(BROWSER_API_KEY); 
    Message message = new Message.Builder().addData("message", "blah blah").build(); 
    String device = "<the key for the device you are sending to goes here>"; 

    try { 
     System.out.println("Sending message..."); 
     Result result = sender.send(message, device, 5); 
     System.out.println("Done sending message"); 
     if (result.getMessageId() != null) { 
      System.out.println("Got message ID: " + result.getMessageId()); 
      System.out.println("Got error code name: " + result.getErrorCodeName()); 
      System.out.println("result: " + result); 
      String canonicalRegId = result.getCanonicalRegistrationId(); 
      if (canonicalRegId != null) { 
       // Database has more than one record for this device. 
       // Replace all of this device's records with this new id 
       System.out.println("Got new canonical reg id: " + canonicalRegId); 
      } 
     } else { 
      String error = result.getErrorCodeName(); 
      if (error.equals(com.google.android.gcm.server.Constants.ERROR_NOT_REGISTERED)) { 
       // application has been removed from device - unregister from database 
       System.out.println("Got error: " + error); 
      } 
     } 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
}