2015-10-30 120 views
1

問題就像標題一樣,我試圖統計用戶(我定義)誰的名字相同,我用countinbackgroundfindinbackground,不管我做了什麼,計數總是0。有人可以幫助我,我不知道爲什麼。非常感謝。下面是我的代碼:解析查詢不起作用

public boolean checknameunique(String n) { 

boolean notexist = true; 
ParseQuery<Userdata> query = ParseQuery.getQuery(Userdata.class); 
query.whereEqualTo("name", n); 
/*query.countInBackground(new CountCallback() { 
    public void done(int count, ParseException e) { 
     if (e == null) { 
      name_count = count; 
     } 
    } 
});*/ 
query.findInBackground(new FindCallback<Userdata>() { 
    @Override 
    public void done(List<Userdata> objects, ParseException e) { 
     if(e==null) { 
      int size = objects.size(); 
      name_count = size; 
     } 
    } 
}); 
if(name_count>0) { 
    notexist = false; 
    Toast.makeText(this, 
      "Username already exist", 
      Toast.LENGTH_LONG).show(); 
} 
return notexist; 
} 
+0

'findInBackground'是異步的,不需額外'name_count'總是'undefined'?將'Toast'放在'done'塊中,看看我的意思:) – adamdport

+0

將'if(name_count> 0)'塊移到done函數中,然後根據'notexist'的值在裏面做任何你想做的事那裏。 –

回答

0

我想你不知道findInBackground方法是異步的,這就是爲什麼你有回調裏面。您可能想了解更多關於Android和Parse中的線程和異步任務。

這裏是你想有正確的代碼:

public void checknameunique(String n) { 

    ParseQuery<Userdata> query = ParseQuery.getQuery(Userdata.class); 
    query.whereEqualTo("name", n); 

    query.findInBackground(new FindCallback<Userdata>() { 
     @Override 
     public void done(List<Userdata> res, ParseException e) { 
      if(e == null) { 
       int size = res.size(); 

       if(res.size() > 0) { 
        showMessage("Username already exist"); 
       } else { 
        proceed(); 
       } 
      } else { 
       showMessage(e.getMessage()); 
      } 
     } 
    }); 
} 

private void showMessage(String message) { 
    Toast.makeText(this, message, Toast.LENGTH_LONG).show(); 
} 

private void proceed() { 
    //TODO: 
}