0

在啓動應用程序時,我想用來自數據庫的數據在片段中填充微調器。我從數據庫中拉出一個字符串列表,並希望將其顯示在微調器中。我已經得到了列表來填充,我相信ArrayExapter在PostExecute中被更改,但是什麼時候什麼都沒有顯示。使用來自Async任務的數據更新微調器

片段代碼

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 
     }); 
    } 
+0

請澄清你的問題有點多。 – Yuriy

+0

所以你正在'doInBackground'中更新'instituteList'? –

+0

耶instituteList在doInBackground – bobeyuno

回答

1

這樣寫:

Spinner autoInstitute = (Spinner)rootView. findViewById(R.id.institute); 

代替這個:

Spinner autoInstitute = (Spinner)getActivity(). findViewById(R.id.institute); 

此外,在您的AsyncTask類中,您已將Login.this寫爲ArrayAdapter()構造函數的第一個參數。將其更改爲getActivity()

這應該是你完全RegisterFragment類:

package com.bhavit.stackoverflow; 

public static class RegisterFragment extends Fragment{ 

    Spinner autoInstitute; 
    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{ 

     autoInstitute = (Spinner)getActivity(). findViewById(R.id.institute); 

     GetInstitute obj = new GetInstitute(); 
     obj.execute(); 


     } 
      return rootView; 
    } 


    class GetInstitute extends AsyncTask<String, String, String>{ 

      @Override 
      protected void onPreExecute() { 

       super.onPreExecute(); 
       pDialog = new ProgressDialog(getActivity()); 
       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>(getActivity(), android.R.layout.simple_list_item_1, institutes_array); 
       instituteApapdter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 

        instituteApapdter.notifyDataSetChanged(); 

      autoInstitute.setAdapter(instituteApapdter); // causes nullpointerexception 

      } 
    } 

} 
+0

的「getActivity()」的更新只是告訴我沒有方法找到 – bobeyuno

+0

寫RegisterFragment.this.getActivity() –

+0

抱歉,但 類型Login.RegisterFragment沒有外圍實例在範圍上 – bobeyuno

相關問題