2016-06-21 8 views
1

Ich habe Setup Backendless App, mit User Tabellenzeile Name mit posts, die Beziehung zwischen Datenobjekt User und Post Tabellen, Daten Relation 1 zu vielen ist. Wenn ich versuche, es unter Verwendung BackendlessUser.getProperty("key") abzurufen, gibt es null Objekte zurück. Sobald es einmal zurückgegeben wurde HashMap. Ich habe die in der docs erwähnte Methode verwendet, aber null erhalten, weil die Größe der Object[] Null ist. Ich habe Daten in dieser Reihe sicher, schrieb <uses-permission> für Internet.immer Null Objekte aus BackendlessUser getProperty()

public class MainActivity extends AppCompatActivity { 
    BackendlessUser user = null; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     Backendless.initApp(this, "app_id", "android_key", "v1"); 

     Backendless.UserService.login("username", "password", new AsyncCallback<BackendlessUser>() { 
      @Override 
      public void handleResponse(BackendlessUser response) { 
       user = response; 
       doStuff(); 
      } 
      @Override 
      public void handleFault(BackendlessFault fault) { 
       Log.e("Error logging in", "message: " + fault.getMessage()); 
      } 
     }); 
    } 

    //important 
    private void doStuff() { 
     Object[] postObjectArray = (Object[]) user.getProperty("posts"); 

     Post[] posts = null; 

     if (postObjectArray != null && postObjectArray.length > 0) 
      posts = (Post[])postObjectArray; 

     if (posts == null) 
     { 
      Log.d("Problems", "posts is null"); 
     } 
    } 
} 

Post Klasse:

public class Post extends Object{ 

    private BackendlessUser user; 
    private String file; 
    private String message; 
    private String objectId; 

    public String getObjectId() { 
     return objectId; 
    } 

    public void setObjectId(String objectId) { 
     this.objectId = objectId; 
    } 

    public Post() { 
    } 

    public Post(BackendlessUser user, String file, String message) { 
     this.user = user; 
     this.file = file; 
     this.message = message; 
    } 

    public BackendlessUser getUser() { 
     return user; 
    } 

    public void setUser(BackendlessUser user) { 
     this.user = user; 
    } 

    public String getFile() { 
     return file; 
    } 

    public void setFile(String file) { 
     this.file = file; 
    } 

    public String getMessage() { 
     return message; 
    } 

    public void setMessage(String message) { 
     this.message = message; 
    } 
} 

Antwort

0

Der Grund, dass Checkbox „Autoload“ wurde, die alle Werte eines zu viele Beziehungen belastet, auf die Checkbox entspricht, wenn der besitzende Tabelle geladen wurde, wurde nicht geprüft . Daher gab user.getProperty("posts") immer null zurück. Aber es ist zu beachten, dass, wenn die Zeilendaten Objekt-Beziehung ist, gibt sie HashMap<String, Object>, so muss Beitrag Konstruktor haben, die HashMap<String, Object> akzeptiert:

public Post(HashMap hashMap) 
{ 
    this.hashMap = hashMap; 
    property1 = (String)hashMap.get("property1"); 
    /*other properties*/ 
} 

Wenn es keine Werte ist, wird es ein Object zurückkehren, was ist nicht gießbar zu einem anderen Typ, so muss die in der Dokumentation verwendete Art angewendet werden, um Randfälle zu beheben.

EDIT:

Es ist nützlich, um map data table to class, bevor Sie Anrufe Backendless machen. Auf diese Weise ist es möglich, alle Arbeiten mit HashMap zu beseitigen und direkt den gewünschten Typ zu erhalten. Wenn Sie jedoch Daten über Backendless.Persistence abrufen, können Sie sie als Argument angeben.