私はBack4Appを使用しています。これは、元のparse.comの基本的なものです。私はコードのこの部分を持っている私の公開リストは、それが持っているはずのような5つの要素を持っています。それから私の方法から抜け出すと、そのリストは空です。メソッドでは、私のリストには要素がありますが、リストが空になったときに
ParseQuery<settings> query = ParseQuery.getQuery(settings.class);
query.whereEqualTo("Username", MainActivity.Display_Name);
query.orderByDescending("createdAt").setLimit(1);
query.findInBackground(new FindCallback<settings>() {
public void done(List<settings> settingsList, ParseException exception) {
for (settings i : settingsList) {
if (exception == null) {
creationDate = i.getCreatedAt();
settingsFrameNumber = i.getFramesPerHive();
settingsArray.add(0, String.valueOf(settingsFrameNumber));
settingsHiveNumber = i.getHiveNumber();
settingsArray.add(0, String.valueOf(settingsHiveNumber));
settingsHiveBodyNumber = i.getHiveBodies();
settingsArray.add(0, String.valueOf(settingsHiveBodyNumber));
settingsSuperNumber = i.getSupers();
settingsArray.add(0, String.valueOf(settingsSuperNumber));
settingsYearsOfBeekeeping = i.getYearsofBeekeeping();
settingsArray.add(0, String.valueOf(settingsYearsOfBeekeeping));
settingsLocation = i.getLocation();
settingsArray.add(0, settingsLocation);
Log.e("Pay Attention", settingsArray.toString());
}
}
}
});
Log.e("Pay Attention", settingsArray.toString());
return settingsArray;
最初のログ文を返す:[Littleton, 5, 4, 3, 1, 2]
2番目のログ文を返す:私は、以前のクラスのリストを作成し、それを行う方法にちょうどローカルではない[]
。
public static List<String> settingsArray = new ArrayList<String>();
どちらが最初でどちらがどちらですか? 'findInBackground()'メソッドは非同期なので、2つの間に競合条件が存在する可能性があります。なぜ 'done()'メソッドで 'settingsArray = settingsList.clone()'をしないのですか? – Shark
完了したメソッド内のログの前のログが、おそらく実行されます。これはちょうど非同期コードの動作です - あなたはネットワーク要求を待っていますが、一方のコードが "上にある"にもかかわらずデータが完成する前にデータを持っていると仮定しないでください –