Java Android改型中的范围问题

Java Android改型中的范围问题,java,android,callback,retrofit,Java,Android,Callback,Retrofit,我对使用改型的Android中的变量范围有一个问题: 在MainActivity中,我使用Reformation将JSON回复获取到POJO(ApiResponse)中,创建一个extendedJourney对象并将其添加到extendedJourneyArrayList中: public class MainActivity extends Activity { private ArrayList<ExtendedJourney> extendedJourn

我对使用改型的Android中的变量范围有一个问题:

在MainActivity中,我使用Reformation将JSON回复获取到POJO(ApiResponse)中,创建一个extendedJourney对象并将其添加到extendedJourneyArrayList中:

public class MainActivity extends Activity {        
    private ArrayList<ExtendedJourney> extendedJourneyArrayList = new ArrayList<>();
    ...

    getAPIReply(...){
        service.getInfo(..., new getCallback());
    ...}

    private class getCallback implements Callback<ApiResponse> {
        public void success(ApiResponse apiResponse, Response response) {
            try {                    
                consumeApiData(apiResponse);
                }
        ...
        }
    }
    private void consumeApiData(ApiResponse apiResponse){
        ExtendedJourney extendedJourney = new ExtendedJourney(apiResponse, params);
        extendedJourneyArrayList.add(extendedJourney);
    }
    public void getData(View view){
        getAPIReply(...);
        //Do stuff with the extendedJourneyArrayList  
    }
public类MainActivity扩展活动{
private ArrayList extendedJourneyArrayList=新ArrayList();
...
getAPIReply(…){
getInfo(…,newgetcallback());
...}
私有类getCallback实现回调{
公共无效成功(ApiResponse ApiResponse,Response Response){
试试{
消费数据(apiResponse);
}
...
}
}
私有void consumeApiData(ApiResponse ApiResponse){
ExtendedTourney ExtendedTourney=新的ExtendedTourney(apiResponse,params);
extendedJourneyArrayList.add(extendedJourney);
}
公共void getData(视图){
getAPIReply(…);
//使用extendedJourneyArrayList执行操作
}
在consumeApiData()内部,一切正常,即从apiResponse和其他参数正确创建ExtendedTourney对象,并使用新的ExtendedTourney正确更新extendedJourneyArrayList

但是,在getData(视图)中,extendedJourneyArrayList为空


如何解决此问题?谢谢:您正在进行异步呼叫。
这意味着,在调用service.getInfo(…,new getCallback());之后,流将正常继续,直到被回调中断。 因此,您在getData(视图v)中编码,可能在收到响应之前执行


因此,您应该对回调上的数据执行您想要的操作(例如,在将数据添加到列表中之后,consumeApiData(..)的末尾),或者执行同步请求(必须在单独的线程中执行).

谢谢@Kushtrim的回答。为了解决我使用AsyncTask执行同步请求的问题,代码如下所示:

public class MainActivity extends Activity {        
    private ArrayList<ExtendedJourney> extendedJourneyArrayList = new ArrayList<>();
...
    public void getData(View view){
        for(int i = 0; i < NUM_REQUESTS; i++){
            new getAPIReply().execute(params);
        }

    }

    private class getAPIReply extends AsyncTask<Params, Void, ApiResponse>{
        @Override
        protected ApiResponse doInBackground(Coords[] coords) {
            return service.getRouteInfo(params);
        }
        @Override
        protected void onPostExecute(ApiResponse apiResponse){
            try {
                consumeApiData(apiResponse);
            } catch (JSONException e) {...}           
    } 

    private void consumeApiData(ApiResponse apiResponse) throws JSONException{
        ExtendedJourney extendedJourney = new ExtendedJourney(apiResponse, params);
        extendedJourneyArrayList.add(extendedJourney);
        if(extendedJourneyArrayList.size() == NUM_REQUESTS) {
              //Do stuff
        }
    }
public类MainActivity扩展活动{
private ArrayList extendedJourneyArrayList=新ArrayList();
...
公共void getData(视图){
对于(int i=0;i