APIからのプロファイルを表示するのにThis libraryを使用しますが、私の問題はbubblePicker.setAdapter()
Retrofit呼び出しが終了する前に実行されます。仕上げ後にメソッドを呼び出す方法呼び出しを更新しますか?
enqueue()
は非同期メソッドなので、待たずに行を実行していると思います。私はこの問題をどのように解決するか考えていません。
studentsArray
がnullであるため、マイコードでNullPointerExceptionがスローされます。
アドバイスをお願いします。 おかげ
マイコード:
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;
}
});
}
...
}
そして、なぜそれが 'onResponse'で呼び出されていないのですか?リクエストが終了した後に呼び出されるのは明らかでしょうか? – tyczj
Github [Here](https://github.com/igalata/Bubble-Picker/issues/29)の報告書である「lateinitプロパティ項目が初期化されていません」というエラーが発生したため – mongkonsrisin