Java Android改型中的范围问题
我对使用改型的Android中的变量范围有一个问题: 在MainActivity中,我使用Reformation将JSON回复获取到POJO(ApiResponse)中,创建一个extendedJourney对象并将其添加到extendedJourneyArrayList中: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
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