2014-03-03 5 views
0

parse.com을 사용하여 Android 앱용 백엔드로 사용하고 있습니다. 연속적으로 발생해야하는 "inBackground"관련 함수가 여러 개 있으며 그 결과를 ListView를 작성하는 데 사용하는 내 Activity로 다시 보냅니다. 내 활동에서 호출하는 메서드를 사용하여 클래스를 작성하는 등의 작업을 수행하는 "깨끗한"방법을 찾고 있습니다. 나는 외부 수업에서 이것을 어떻게하는지 알아낼 수 없다. 예를 들어 다음과 같은 코드를 가지고 :코드가 계속되기 전에 구문 분석이 백그라운드 작업을 수행하도록 보장

우리는

private List<ParseObject> result; 

public List<ParseObejct> getList() { 
    ParseQuery<ParseObject> query = ParseQuery.getQuery(TABLE_NAME); 
    query.whereEqualTo(KEY, VALUE); 
    query.findInBackground(new FindCallback<ParseObject>() { 
     public void done(List<ParseObject> list, ParseException e) { 
      if (e == null) { 
       result = list; 
      } else { 
       result = null; 
      } 
     } 
    }); 
    return result; 
} 

같은으로 getList()를 정의합니다

List<ParseObject> list = ParseUtility.getList(); 

나는 "findInBackground가"로 설정되어이 방법은 "결과"전에 반환하는 원인이 있다고 생각 올바른 값. 이것에 대한 임시 해결책은 무엇입니까?

+0

return 문을 콜백에 넣으려고 했습니까? result = list 대신 반환 목록을 넣고 null을 반환하면 어떻게됩니까? – Moonwalkr

답변

1

함수에서 결과를 얻으려면 '비동기식'ParseQuery.findInBackground (...) 대신 'synchronized'메서드 ParseQuery.find (...)를 사용해야합니다. 그런 다음이 함수를 작업자 스레드 또는 서비스 또는 AsyncTask 등에서 호출하십시오.

public static List<ParseObejct> getList() { 
    ParseQuery<ParseObject> query = ParseQuery.getQuery(TABLE_NAME); 
    query.whereEqualTo(KEY, VALUE); 
    result = query.find(); 
} 


new AsyncTask<Void, Void, List<ParseObject>>() { 

    @Override 
    protected List<ParseObject> doInBackground(Void... params) 
    { 
     return ParseUtility.getList(); 
    } 
}.execute(); 
관련 문제