Android 完成改装调用后如何调用方法?

Android 完成改装调用后如何调用方法?,android,retrofit,Android,Retrofit,我过去常常显示API中的配置文件,但我的问题是bubblePicker.setAdapter()在完成改装调用之前执行 我认为这是因为enqueue()是一种异步方法,所以它会在不等待的情况下执行行。我不知道如何解决这个问题 我的代码将抛出NullPointerException,因为studentsArray为null 请给我一些建议。 谢谢 我的代码: public class FriendFragment extends Fragment { Http http = new Ht

我过去常常显示API中的配置文件,但我的问题是
bubblePicker.setAdapter()
在完成改装调用之前执行

我认为这是因为
enqueue()
是一种异步方法,所以它会在不等待的情况下执行行。我不知道如何解决这个问题

我的代码将抛出NullPointerException,因为
studentsArray
为null

请给我一些建议。 谢谢

我的代码:

public class FriendFragment extends Fragment {

    Http http = new Http();
    final String BASE_URL = http.getUrl();

    String[] studentsArray;
    List < Student > students;

    BubblePicker bubblePicker;


    public static FriendFragment newInstance() {
        FriendFragment fragment = new FriendFragment();
    return fragment;
    }

    private ApiService getInterfaceService() {
        Retrofit retrofit = new Retrofit.Builder()
        .baseUrl(BASE_URL)
        .addConverterFactory(GsonConverterFactory.create())
        .build();
        final ApiService mInterfaceService = retrofit.create(ApiService.class);
        return mInterfaceService;
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.fragment_friend, container, false);
        bubblePicker = (BubblePicker) rootView.findViewById(R.id.picker);
        ApiService mApiService = getInterfaceService();
        Call < GetFriendsPhotoDao > mService = mApiService.photo("2", "2202", "2", "1", "1", "2558");
        //***** Call API Here *****
        mService.enqueue(new Callback < GetFriendsPhotoDao > () {
            @Override
            public void onResponse(Call < GetFriendsPhotoDao > call, Response < GetFriendsPhotoDao > response) {
                GetFriendsPhotoDao getFriendsPhotoDao = response.body();
                if (getFriendsPhotoDao.getSuccess()) {
                    students = getFriendsPhotoDao.getStudent();
                    studentsArray = new String[students.size()];
                    for (int i = 0; i < studentsArray.length; i++) {
                        studentsArray[i] = students.get(i).getStuId();
                    }
                } 
            }
            @Override
            public void onFailure(Call < GetFriendsPhotoDao > call, Throwable t) {
                call.cancel();
            }
        });
        addBubble();
        return rootView;
    }



//***** Add bubbles here *****
private void addBubble() {

    bubblePicker.setBubbleSize(10);
    bubblePicker.setAdapter(new BubblePickerAdapter() {
        @Override
        public int getTotalCount() {
            return studentsArray.length;
        }

        @NotNull
        @Override
        public PickerItem getItem(int position) {
            PickerItem item = new PickerItem(); item.setIcon(getResources().getDrawable(R.drawable.person));
            item.setTextColor(ContextCompat.getColor(getContext(), android.R.color.white));
            return item;
        }
    });
  }

...
}
公共类FriendFragment扩展了片段{
Http=newhttp();
最后一个字符串BASE_URL=http.getUrl();
字符串[]studentsArray;
列出<学生>学生;
泡泡嘴泡泡嘴;
公共静态FriendFragment newInstance(){
FriendFragment=新的FriendFragment();
返回片段;
}
私有API服务getInterfaceService(){
改装改装=新改装.Builder()
.baseUrl(基本URL)
.addConverterFactory(GsonConverterFactory.create())
.build();
final-ApiService-mInterfaceService=reformation.create(ApiService.class);
返回Minterface服务;
}
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
}
@凌驾
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
视图根视图=充气机。充气(R.layout.fragment\u friend,container,false);
bubblePicker=(bubblePicker)rootView.findviewbyd(R.id.picker);
ApiService mApiService=getInterfaceService();
调用mService=mApiService.photo(“2”、“2202”、“2”、“1”、“1”、“2558”);
//*****在这里调用API*****
mService.enqueue(新回调(){
@凌驾
公共void onResponse(调用调用,响应响应){
getFriendshotodao getFriendshotodao=response.body();
if(getFriendsPhotoDao.getSuccess()){
students=getFriendsPhotoDao.getStudent();
studentsArray=新字符串[students.size()];
for(int i=0;iCall,Throwable t){
call.cancel();
}
});
添加气泡();
返回rootView;
}
//*****在此处添加气泡*****
私有void addBubble(){
气泡尺寸(10);
setAdapter(新的BubblePickerAdapter(){
@凌驾
public int getTotalCount(){
返回studentsArray.length;
}
@NotNull
@凌驾
公共PickerItem getItem(int位置){
PickerItem=new PickerItem();item.setIcon(getResources().getDrawable(R.drawable.person));
setTextColor(ContextCompat.getColor(getContext(),android.R.color.white));
退货项目;
}
});
}
...
}

您需要移动
addBubble()从内部
onResponse
,获得响应后

mService.enqueue(new Callback < GetFriendsPhotoDao > () {
            @Override
            public void onResponse(Call < GetFriendsPhotoDao > call, Response < GetFriendsPhotoDao > response) {
                GetFriendsPhotoDao getFriendsPhotoDao = response.body();
                if (getFriendsPhotoDao.getSuccess()) {
                    students = getFriendsPhotoDao.getStudent();
                    studentsArray = new String[students.size()];
                    for (int i = 0; i < studentsArray.length; i++) {
                        studentsArray[i] = students.get(i).getStuId();
                    }
                } 
             addBubble();
             //^^^^^^^
            }
            @Override
            public void onFailure(Call < GetFriendsPhotoDao > call, Throwable t) {
                call.cancel();
            }
        });
        //addBubble();
mService.enqueue(新回调(){
@凌驾
公共void onResponse(调用调用,响应响应){
getFriendshotodao getFriendshotodao=response.body();
if(getFriendsPhotoDao.getSuccess()){
students=getFriendsPhotoDao.getStudent();
studentsArray=新字符串[students.size()];
for(int i=0;iCall,Throwable t){
call.cancel();
}
});
//添加气泡();

实际上,您正在创建适配器的实例,并在web service override onResponse方法之外设置适配器,这就是适配器中未设置数据的原因。请尝试此方法-

    public class FriendFragment extends Fragment {

    Http http = new Http();
    final String BASE_URL = http.getUrl();

    String[] studentsArray;
    List < Student > students;

    BubblePicker bubblePicker;


    public static FriendFragment newInstance() {
        FriendFragment fragment = new FriendFragment();
    return fragment;
    }

    private ApiService getInterfaceService() {
        Retrofit retrofit = new Retrofit.Builder()
        .baseUrl(BASE_URL)
        .addConverterFactory(GsonConverterFactory.create())
        .build();
        final ApiService mInterfaceService = retrofit.create(ApiService.class);
        return mInterfaceService;
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.fragment_friend, container, false);
        bubblePicker = (BubblePicker) rootView.findViewById(R.id.picker);
        ApiService mApiService = getInterfaceService();
        Call < GetFriendsPhotoDao > mService = mApiService.photo("2", "2202", "2", "1", "1", "2558");
        //***** Call API Here *****
        mService.enqueue(new Callback < GetFriendsPhotoDao > () {
            @Override
            public void onResponse(Call < GetFriendsPhotoDao > call, Response < GetFriendsPhotoDao > response) {
                GetFriendsPhotoDao getFriendsPhotoDao = response.body();
                if (getFriendsPhotoDao.getSuccess()) {
                    students = getFriendsPhotoDao.getStudent();
                    studentsArray = new String[students.size()];
                    for (int i = 0; i < studentsArray.length; i++) {
                        studentsArray[i] = students.get(i).getStuId();
                    }
                    addBubble();
                } 
            }
            @Override
            public void onFailure(Call < GetFriendsPhotoDao > call, Throwable t) {
                call.cancel();
            }
        });
        //addBubble();
        return rootView;
    }



//***** Add bubbles here *****
private void addBubble() {

    bubblePicker.setBubbleSize(10);
    bubblePicker.setAdapter(new BubblePickerAdapter() {
        @Override
        public int getTotalCount() {
            return studentsArray.length;
        }

        @NotNull
        @Override
        public PickerItem getItem(int position) {
            PickerItem item = new PickerItem(); item.setIcon(getResources().getDrawable(R.drawable.person));
            item.setTextColor(ContextCompat.getColor(getContext(), android.R.color.white));
            return item;
        }
    });
  }

...
}
公共类FriendFragment扩展了片段{
Http=newhttp();
最后一个字符串BASE_URL=http.getUrl();
字符串[]studentsArray;
列出<学生>学生;
泡泡嘴泡泡嘴;
公共静态FriendFragment newInstance(){
FriendFragment=新的FriendFragment();
返回片段;
}
私有API服务getInterfaceService(){
改装改装=新改装.Builder()
.baseUrl(基本URL)
.addConverterFactory(GsonConverterFactory.create())
.build();
final-ApiService-mInterfaceService=reformation.create(ApiService.class);
返回Minterface服务;
}
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
}
@凌驾
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
视图根视图=充气机。充气(R.layout.fragment\u friend,container,false);
bubblePicker=(bubblePicker)rootView.findviewbyd(R.id.picker);
ApiService mApiService=getInterfaceService();
调用mService=mApiService.photo(“2”、“2202”、“2”、“1”、“1”、“2558”);
//*****在这里调用API*****
mService.enqueue(新回调(){
@凌驾
公共void onResponse(调用调用,响应响应){
getFriendshotodao getFriendshotodao=response.body();
@Override
protected void finalize() throws Throwable {
    super.finalize();
    addBubble();     //your func
}