2015-01-11 2 views
1

Java/Android 프로그래밍에 익숙하지 않아 Parse.com 콜백에서 멈추었습니다.구문 분석 객체 콜백에서 객체 데이터 반환

현재 사용자가 소유 한 객체의 objectId를 요청하는 메소드 (method1)가 있습니다. 콜백을 통해 데이터 브라우저에서 개체를 가져 오는 쿼리가 포함 된 다른 메서드 (method2)를 호출하여이 작업을 수행합니다.

모든 코드를 작성했지만 메서드 2에 대한 콜백이 멈추었습니다. 개체 데이터가 메서드 1에 반환되기를 원하지만 콜백 형식 (void)으로 인해 불가능한 것으로 보입니다.

나는 메소드의 나머지 부분을 실행하기 전에 콜백이 돌아 오기를 기다리는 방법도 알았다. 누군가 나를 도울 수 있다면 고맙겠다.

public void method1(){ 
    String objectId = null; 

    objectId = QueryStatisticObjectId("Age"); 

    Log.i(TAG, "objectId returned to method = " + objectId); 
} 



    public String QueryStatisticObjectId(final String statistic){ 
     ParseQuery<ParseObject> query = ParseQuery.getQuery("Statistics"); 
     query.whereEqualTo("user", ParseUser.getCurrentUser()); 
     query.whereEqualTo("statistic", statistic); 
     query.getFirstInBackground(new GetCallback<ParseObject>() { 
      @Override 
      public void done(ParseObject object, ParseException e) { 
       if (e == null){ 
        //We have data! 
        String objectId = object.getObjectId(); 
        return; 
       } 
       else 
       { 
        //Something went wrong!?! 
        e.printStackTrace(); 
       } 
      } 
     }); 

답변

2

그럼, 당신이하려는 것은 iOS 또는 안드로이드에서 구문 분석을 사용하여 사용할 수 없습니다 :

이 내 코드입니다. 아마도 .NET에서 당신이 원하는 방식으로 작동 할 것이라고 생각합니다. Await 키워드를 사용하십시오.

대신, 자신에게 물어 :

  1. 를이 방법으로 건축가에 클래스를 원하는 이유는 무엇입니까?
  2. 값을 원래 방법으로 되돌리는 것이 중요한 이유는 무엇입니까?
  3. 그냥 재활용 할 수있는 방법을 원하기 때문입니까?
  4. 더 많은 의미가있는 메서드 컨텍스트에서 값을 처리하기를 원하기 때문입니까? 또한 다시 사용하는 동안, 당신은 의미가 문맥 (method1())에서 반환 된 결과를 처리하는 코드를 작성할 수 있습니다, 이런 식으로

    public void method1() { 
        QueryStatisticObjectId("Age", new GetCallback<ParseObject>() { 
         @Override 
         public void done(ParseObject object, ParseException e) { 
          if (e == null) { 
           String objectId = object.getObjectId(); 
           Log.i(TAG, "objectId returned to method = " + objectId); 
          } else { 
           Log.i(TAG, "objectId not found"); 
          }    
         } 
        }); 
    } 
    
    public void QueryStatisticObjectId(final String statistic, GetCallback<ParseObject> callback) { 
        ParseQuery<ParseObject> query = ParseQuery.getQuery("Statistics"); 
        query.whereEqualTo("user", ParseUser.getCurrentUser()); 
        query.whereEqualTo("statistic", statistic); 
        query.getFirstInBackground(callback); 
    } 
    

    : 그렇다면

,이 같은 시도 원하는만큼 쿼리 메서드. 또한 @ JimW의 대답과는 달리 동기식 웹 호출을 사용하지 않으므로 앱의 UI를 응답 성있게 유지할 수 있습니다.

+0

내가 찾고있는 것 같습니다. 잠을 지금 자고 싶지만 내일 애플 리케이션에 이것을 구현해야합니다. 고마워요! – Dannyvdz

0

동일한 문제가 발생했습니다. 콜백은 실제로 성가시다. 무작위로 실행되는 것처럼 보이며, void의 반환 형식이 모든 것을 오버라이드해야합니다. 콜백없이 일반 .find()를 사용하여 문제를 해결했습니다. 그런 다음 사용자 지정 코드를 사용하여 모든 불만 사항을 해결했습니다.