1

我已經按照這個tuto爲我的項目(https://cloud.google.com/developers/articles/how-to-build-mobile-app-with-app-engine-backend-tutorial),並且一切工作正常。谷歌端點,物化和持久

但是,當我想爲我的實體使用objectify類時,它不起作用,我無法使用我的android應用程序檢索數據存儲區上的數據!

例如,該代碼也沒關係,我可以從我的Android應用程序獲取我的用戶回來:

import javax.jdo.annotations.Index; 
import javax.persistence.Entity; 
import javax.persistence.Id; 

@Entity 
@Index 
public class Utilisateur { 

    //Nos variables de classes 
    @Id String num_portable; //Clé pour notre entité NOTION CLE PRIMAIRE String car c'est à nous de le définir. 
    Boolean sexe; 
    int date_naissance; 
    String position_geo; 
    String liste_contact; 
    Boolean blacklistage; 

    //Constructeur par défaut (Obligatoire pour Objectify) 
    private Utilisateur(){} 

    public Utilisateur (String num_portable, Boolean sexe, int date_naissance, String position_geo, String liste_contact, Boolean blacklistage) { 

     this.num_portable=num_portable; 
     this.sexe=sexe; 
     this.date_naissance=date_naissance; 
     this.position_geo=position_geo; 
     this.liste_contact=liste_contact; 
     this.blacklistage=blacklistage;     
    } 

    public String getNum_portable() { 
     return num_portable; 
    } 



} 

但我不使用物化。當我想用物化,與該代碼,它不工作: 我只是將這段代碼:

import javax.jdo.annotations.Index; 
import javax.persistence.Entity; 
import javax.persistence.Id; 

有了這一個:

import com.googlecode.objectify.annotation.Entity; 
import com.googlecode.objectify.annotation.Id; 
import com.googlecode.objectify.annotation.Index; 

,我得到我的應用程序引擎這樣的錯誤:

com.google.api.server.spi.SystemService invokeServiceMethod: Class Utilisateur for query has not been resolved. Check the query and any imports/aliases specification 
javax.persistence.PersistenceException: Class Utilisateur for query has not been resolved. Check the query and any imports/aliases specification 

所以我的問題是:我們可以用物化與Android應用程序或數據持久與它(和應用程序引擎)不工作?

編輯:這是對我的Android應用程序(如這裏=>https://cloud.google.com/developers/articles/how-to-build-mobile-app-with-app-engine-backend-tutorial相同的代碼)調用後端我的代碼:

public class JeveuxvoirActivity extends Activity { 


     private ListView utilisateursList; 
     private List<Utilisateur> utilisateurs = null; 

    //Création de notre activité 
     public void onCreate(Bundle savedInstanceState) { 

      //Création de notre interface graphique 
      super.onCreate(savedInstanceState); 

      //Remove title bar 
      this.requestWindowFeature(Window.FEATURE_NO_TITLE); 
      //On définit le Layout de notre activité 
      setContentView(R.layout.activity_jeveuxvoir); 

      utilisateursList = (ListView) findViewById(R.id.list_principal_user); 

      // start retrieving the list of nearby places 
      new ListOfUtilisateursAsyncRetriever().execute(); 



     }  


     //******************************************************* 
     //     FONCTIONS ASYNC 
     //******************************************************* 
     /** 
     * AsyncTask for retrieving the list of places (e.g., stores) and updating the 
     * corresponding results list. 
     */ 
     private class ListOfUtilisateursAsyncRetriever extends AsyncTask<Void, Void, CollectionResponseUtilisateur> { 

     @Override 
     protected CollectionResponseUtilisateur doInBackground(Void... params) { 


      Utilisateurendpoint.Builder endpointBuilder = new Utilisateurendpoint.Builder(
       AndroidHttp.newCompatibleTransport(), new JacksonFactory(), null); 

      endpointBuilder = CloudEndpointUtils.updateBuilder(endpointBuilder); 


      CollectionResponseUtilisateur result; 

      Utilisateurendpoint endpoint = endpointBuilder.build(); 

      try { 
      result = endpoint.listUtilisateur().execute(); 
      } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
      result = null; 
      } 
      return result; 
     } 

     @Override 
     @SuppressWarnings("null") 
     protected void onPostExecute(CollectionResponseUtilisateur result) { 
      ListAdapter utilisateursListAdapter = createUtilisateurListAdapter(result.getItems()); 
      utilisateursList.setAdapter(utilisateursListAdapter); 

      utilisateurs = result.getItems(); 
     } 
     } 

     private ListAdapter createUtilisateurListAdapter(List<Utilisateur> utilisateurs) { 

      List<Map<String, Object>> data = new ArrayList<Map<String, Object>>(); 
      for (Utilisateur utilisateur : utilisateurs) { 
       Map<String, Object> map = new HashMap<String, Object>(); 
       map.put("utilisateurIcon", R.drawable.ic_launcher); 
       map.put("utilisateurPort", utilisateur.getNumPortable()); 
       data.add(map); 
      } 

      SimpleAdapter adapter = new SimpleAdapter(JeveuxvoirActivity.this, data, R.layout.utilisateur_item, 
       new String[] {"utilisateurIcon", "utilisateurPort"}, 
       new int[] {R.id.utilisateur_Icon, R.id.utilisateur_port}); 

      return adapter; 
      } 
+0

嗨,Objectify是專爲AppEngine數據存儲,所以它應該工作,無論你如何訪問你的端點(Android,Web應用程序等)。你可以在你做出客觀化查詢的地方提供代碼片段嗎? – user3355018

+0

另外,可以肯定的是,您是否已通過Objectify註冊​​了'Utilisateur'類?請參閱https://code.google.com/p/objectify-appengine/wiki/Entities#Registering_Entities – user3355018

回答

1

JPA和客體是用於連接到數據存儲的2層的替代品。避免同時使用兩者。如果單獨使用,兩者都有自己的約定。

+0

謝謝!但是我打開Objectify,它比JDO或JPA管理更好的父母/孩子關係:) – Phil

+0

是的,這也是我的建議。雖然它需要習慣。確保你閱讀簡短而又甜蜜的文檔。並且使用最新版本,所有時間都有突破性的改變。 – Ashish