私のアプリケーションには別の問題があります。私は私のContactAdapterからユーザデータをフェッチするためにMainActivityに次のコードを使用します。AsyncCallbackの優先度
private List<String> loadContactData() {
ContactAdapter db = new ContactAdapter(getApplicationContext());
// Spinner Drop down elements
List<String> contacts = db.getAllContacts();
// Creating adapter for spinner
ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(this,
android.R.layout.simple_spinner_item, contacts);
// Drop down layout style - list view with radio button
dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
Log.d("SPINNER", String.valueOf(contacts));
return contacts;
}
そしてContactAdapter:
public List<String> getAllContacts(){
final List<String> contacts_id = new ArrayList<String>();
final List<String> contacts_name = new ArrayList<String>();
Backendless.Data.of(BackendlessUser.class).find(new AsyncCallback<BackendlessCollection<BackendlessUser>>() {
public void handleResponse(BackendlessCollection<BackendlessUser> users) {
Iterator<BackendlessUser> userIterator = users.getCurrentPage().iterator();
while (userIterator.hasNext()) {
BackendlessUser user = userIterator.next();
String user_mail = user.getEmail();
String user_id = user.getUserId();
contacts_name.add(user_mail);
contacts_id.add(user_id);
}
Log.d("getAllContacts: ", String.valueOf(contacts_name)); }
public void handleFault(BackendlessFault backendlessFault) {
System.out.println("Server reported an error - " + backendlessFault.getMessage());}});
return contacts_name;
}
確かに私の問題は、Backendlessクエリが減速するということです...ので、私のLogcatでは、最初に空の "スピナー"と2番目の "getAllContacts"がサーバーからのユーザーデータを参照しています。その結果、loadContactData()からのreturn contacts文も空です。
loadContactData()でユーザーデータを取得するには、getAllContacts()が最初に完了していることをどのように達成できますか?
私は、サーバー上の登録ユーザーでMultiSelectionSpinnerを埋めようとしています。そのため、私は、MainActivityのonCreateで次のコードを使用します:List contact_list = loadContactData(); String [] contact_stringArray = contact_list。toArray(新しいString [contact_list.size()]); スピナー=(MultiSelectionSpinner)findViewById(R.id.mySpinner1); spinner.setItems(contact_stringArray); –
Timitrov
サンプルコードをいくつか追加しましたが、これは最小限の努力のソリューションでなければなりません。進行中のダイアログを表示して、データを待っている間何かが起きていることをユーザーに知らせるべきです。また、何かが間違っていたらエラーダイアログを表示する必要があります。 – crysxd