비동기 작업에서 Firebasequery를 실행하고 싶습니다. 문제는 내가 Thread.sleep (5000)을 호출해야한다는 것입니다. 예상 결과 목록을 가져옵니다. 그렇지 않으면 태스크가 Firebase 쿼리 완료를 기다리지 않고 종료되기 때문에 목록이 항상 비어 있습니다. 작업은 백그라운드 서비스에서 호출되고 Task.execute (). get ()을 통해 결과를 기다립니다.
Thread.sleep ()을 호출하지 않고 비동기 작업 결과를 얻을 수있는 가능성이 있습니까?
@Override
protected ArrayList<Product> doInBackground(InventoryCheckService... params) {
this.service = params[0];
result = new ArrayList<>();
DatabaseReference userReference = DatabaseAdapter.getInstance().getUserReference();
if(userReference != null){
userReference.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
HashMap<String, Product> changedProducts = dataSnapshot.getValue(new GenericTypeIndicator<HashMap<String, Product>>() {
});
if(changedProducts != null){
Iterator<String> iterator = changedProducts.keySet().iterator();
String nextExpirationDate = getDateForTommorow();
while (iterator.hasNext()) {
String nextKey = iterator.next();
Product product = changedProducts.get(nextKey);
if (product.getBestBeforeDate().containsKey(nextExpirationDate)) {
result.add(product);
}
}
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
return result;
}
도움을 주셔서 미리 감사드립니다! :)
마침내 나는 내 문제를 해결했습니다. Taskexecution 후에 Intent를 올리고 싶었습니다. 서비스에서 인 텐트를 시작하는 대신 코드를 비동기 작업에 넣었습니다.
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
HashMap<String, Product> changedProducts = dataSnapshot.getValue(new GenericTypeIndicator<HashMap<String, Product>>() {
});
if(changedProducts != null){
Iterator<String> iterator = changedProducts.keySet().iterator();
String nextExpirationDate = getDateForTommorow();
while (iterator.hasNext()) {
String nextKey = iterator.next();
Product product = changedProducts.get(nextKey);
if (product.getBestBeforeDate().containsKey(nextExpirationDate)) {
result.add(product);
}
}
// start Intent here...
}
이제는 작업이 인 텐트를 시작하는 작업의 일부이기 때문에 작업이 완료 될 때까지 잠을 잘 필요가 없습니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다