【发布时间】:2019-06-12 21:39:01
【问题描述】:
当我将获得的数据(包含在 arraylist 中)复制到新的 arraylist 并返回时,新的 arraylist 不会返回任何值。 onDataReceived(ArrayList arrayList)是arraylist中volley异步获取数据后的监听回调方法。
package com.example.bike.ViewModels;
import android.app.Application;
import android.arch.lifecycle.AndroidViewModel;
import android.arch.lifecycle.LiveData;
import android.support.annotation.NonNull;
import com.example.bike.Models.BikesInfo;
import com.example.bike.Repository.BikesRepository;
import com.example.bike.Repository.Listener;
import com.example.bike.Views.ApplicationContext;
import java.util.ArrayList;
import java.util.Collections;
public class BikesViewModel extends AndroidViewModel {
private BikesRepository bikesRepository;
public static ArrayList<BikesInfo> vmarrayList = new ArrayList<>();
public BikesViewModel(@NonNull Application application) {
super(application);
bikesRepository = new BikesRepository(application, new Listener() {
@Override
public void onDataReceived(ArrayList<BikesInfo> arrayList) {
vmarrayList.addAll(arrayList);
}
@Override
public void onError(int error) {
}
});
bikesRepository.getArrayList();
}
public ArrayList<BikesInfo> getbikesinfolistobservable(){
return vmarrayList;
}
}
编辑: MainActivity.java
package com.example.bike.Views.ui;
import android.arch.lifecycle.AndroidViewModel;
import android.arch.lifecycle.Observer;
import android.arch.lifecycle.ViewModelProviders;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import com.example.bike.Models.BikesInfo;
import com.example.bike.R;
import com.example.bike.ViewModels.BikesViewModel;
import com.example.bike.Views.Adapters.BikesListAdapter;
import java.util.ArrayList;
public class MainActivity extends AppCompatActivity {
BikesViewModel bikesViewModel;
RecyclerView recyclerView;
LinearLayoutManager linearLayoutManager;
BikesListAdapter bikesListAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
recyclerView = findViewById(R.id.bikes_recycler);
linearLayoutManager = new LinearLayoutManager(this);
recyclerView.setLayoutManager(linearLayoutManager);
recyclerView.setHasFixedSize(true);
bikesViewModel = ViewModelProviders.of(MainActivity.this).get(BikesViewModel.class);
bikesListAdapter = new BikesListAdapter(bikesViewModel.getbikesinfolistobservable());
recyclerView.setAdapter(bikesListAdapter);
}
}
【问题讨论】:
-
主要是因为在回调“OnDataReceived”之前调用了“getbikesinfolistobeservable”方法。在调试模式下检查执行。
-
vmarrayList 是空的还是空的?如果它为空,则检查它是否是从此类外部更改的。如果它为空可能是因为执行顺序。
-
另外,如果你要使用getter,为什么变量是静态的?
-
@Marco 我认为你是对的,我迟到了数据。如何克服这个问题?
-
@EugenioValeiras vmarraylist 起初是空的,但我正在复制另一个数组列表,然后返回它
标签: java android arraylist return