2014-07-20 2 views
0

Google API에서 작업 공간 목록을 검색하는 메소드를 호출하고 있습니다.콜백 성공이 수신 될 때까지 스레드에서 대기 중

nearByPlacesArray = gmObj.getNearbyPlaces(nameValuePairs); 
    if (nearByPlacesArray != null) { 
      for (int i = 0; i < nearByPlacesArray.length; i++) { 
       nearbyPlaces.add(new mNearbyPlace(Integer.parseInt(nearByPlacesArray[i][0]), nearByPlacesArray[i][1], Double.parseDouble(nearByPlacesArray[i][2]), Double.parseDouble(nearByPlacesArray[i][3]))); 
      } 
     } 

그런 다음 목록 양식을 작성하고 회 전자 어댑터로 전달하십시오.

getNearbyPlaces 함수는 비동기 적으로 실행되고 Retrofit success 콜백을 사용하여 작업 영역 목록을 작성하고 구문 분석합니다.

이 함수를 호출하면 null 객체가 반환되고 nearByPlacesArray이 null 일 때 목록을 만드는 다음 줄로 이동합니다.

success 메서드가 호출되어 반환 된 nearByPlacesArray이 null이 아니므로 계속 처리를 중단하고 싶습니다.

어떻게하면됩니까?

public String[][] getNearbyPlaces(List<NameValuePair> nameValuePairs) { 

     try { 
      … 
      RestAdapter restAdapter = new RestAdapter.Builder().setEndpoint(finalUri.toString()).build(); 
      IGooglePlacesApi iGPlaceApi = restAdapter.create(IGooglePlacesApi.class); 

      iGPlaceApi.getStreams(new Callback<mGooglePlacesApiResponse>() { 

       @Override 
       public void failure(RetrofitError retrofitError) { 
        String serverResponse = retrofitError.toString(); 
       } 

       @Override 
       public void success(mGooglePlacesApiResponse googlePlacesObj, Response arg1) { 
        nearbyPlaces = new String[googlePlacesObj.results.size()][4]; 
        for (int i = 0; i < googlePlacesObj.results.size(); i++) { 
         mGooglePlaces.place place = googlePlacesObj.results.get(i); 
         nearbyPlaces[i][0] = place.icon; 
         ... 
        } 

       } 
      }); 
     } 
     … 
     finally { 
      Log.d("serverResponse:", serverResponse); 
     } 

     return nearbyPlaces; 
    } 

P. 나는 이미 메인 UI 스레드가 아닌 다른 async 스레드에서이 모든 작업을 수행하고 있으므로 흐름을 중단해도 문제가되지 않습니다.

+0

결과를 BlockingQueue에 추가하고 스레드가 요소를 take()하도록 할 수 있습니다. –

답변

0

나는 nearByPlacesArray의 응답으로 뭔가를 얻고 있다고 생각합니다. 그 이유는 그것이 차단되면 내부로 들어가기 때문에 서버에서 오류 메시지/응답을받을 때 발생합니다. 오류 응답을 잘못된 정보가 있지만 null이 아닌 것으로 처리하기 때문입니다.

이 문제를 처리하려면 "콜백"인터페이스 내에 일부 유효성 검사 기능을 구현해야합니다. 그 문제를 해결할 것입니다.

관련 문제