응용 프로그램을 시작하면 조각의 스피너에 데이터베이스의 데이터가 채워집니다. 데이터베이스에서 문자열 목록을 가져 와서 스피너에 표시하려고합니다. 채울 목록이 있고 ArrayAdapter는 PostExecute에서 변경되지만 아무 것도 표시되지 않을 때 변경됩니다.비동기 작업의 데이터로 스피너 업데이트
조각 코드
public static class RegisterFragment extends Fragment{
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
List<String> instituteList = new ArrayList<String>();
View rootView = inflater.inflate(R.layout.fragment_register, container, false);
if (instituteList.isEmpty()){ //list is null on app start-up
Log.d("test","null list");
}else{
Spinner autoInstitute = (Spinner)getActivity(). findViewById(R.id.institute);
// Get the string array
String[] institutes = (String[]) instituteList.toArray(new String[instituteList.size()]);;
// Create the adapter and set it to the AutoCompleteTextView
ArrayAdapter<String> instituteApapdter =
new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1, institutes);
instituteApapdter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
autoInstitute.setAdapter(instituteApapdter);
}
return rootView;
}
비동기 클래스
class getInstitute extends AsyncTask<String, String, String>{
@Override
protected void onPreExecute() {
super.onPreExecute();
pDialog = new ProgressDialog(Login.this);
pDialog.setMessage("Loading Institute List");
pDialog.setIndeterminate(false);
pDialog.setCancelable(true);
pDialog.show();
}
@Override
protected String doInBackground(String... params) {
//Get data and store in List
}
protected void onPostExecute(String file_url) {
// dismiss the dialog once done
pDialog.dismiss();
institutes_array = (String[]) instituteList.toArray(new String[instituteList.size()]);;
final ArrayAdapter<String> instituteApapdter =
new ArrayAdapter<String>(Login.this, android.R.layout.simple_list_item_1, institutes_array);
instituteApapdter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
runOnUiThread(new Runnable() {
public void run() {
instituteApapdter.notifyDataSetChanged();
}
//autoInstitute.setAdapter(instituteApapdter); // causes nullpointerexception
});
}
좀 더 문제를 명확히하십시오. – Yuriy
'doInBackground'에서'instituteList'를 업데이트하고 있습니까? –
instituteList는 doInBackground – bobeyuno