2013-09-24 33 views
1

我已經使用AsyncTaskActivity,它給了我想要的結果,沒有任何失敗。 現在我需要使用AsyncTaskFragments。在FragmentsAsyncTask未更新UI。我得到了一個答案here。我在我的代碼中嘗試了這種邏輯,但仍然無法在從servlet獲得響應後更新UI。您的幫助將非常感激。使用帶碎片的AsyncTask:Android

代碼是我曾嘗試:

public class FragmentMyProfile extends Fragment 
{ 
    TextView txtViewUserFullName; 

    SharedPreferences shrdPref; 

    String currentUserFirstName = "", currentUserEmail = ""; 
    String URL = "http://10.0.2.2:8080/iGnite_Survey/GetUserDetailsServlet"; 

    String jsonObjectReceivedFromServer = ""; 


    public FragmentMyProfile() 
    { 
     // empty constructor required for fragment subclass 
    } 



    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
    { 
     View rootView = inflater.inflate(R.layout.fragment_my_profile, container, false); 


     shrdPref = rootView.getContext().getSharedPreferences("shrdPref", Context.MODE_PRIVATE); 

     txtViewUserFullName = (TextView) rootView.findViewById(R.id.textViewUserFullName); 



     //get current user first name, default value is "" 
     currentUserFirstName = shrdPref.getString(String.valueOf(R.string.curentLoggedInUserFirstName), ""); 
     currentUserEmail = shrdPref.getString(String.valueOf(R.string.curentLoggedInUserEmail), ""); 


     //display current user first name 
     if(!currentUserFirstName.equals("")) 
     { 
      txtViewDisplayUserFirstName.setText("Welcome "+currentUserFirstName); 
     } 
     else 
     { 
      txtViewDisplayUserFirstName.setText(String.valueOf(R.string.welcomeUser)); 
     } 


     //get all user details from server 
     GetUserDetailsAsyncTask getUserDetailsAsyncTask = new GetUserDetailsAsyncTask (new FragmentCallback() 
     { 
      @Override 
      public void onTaskDone(String output) 
      { 
       //txtViewUserFullName.setText(output); 
      } 
     }); 
     getUserDetailsAsyncTask.execute(new String[] { URL }); 



     return rootView; 
    } 





    public interface FragmentCallback 
    { 
     public void onTaskDone(String output); 
    } 



    //------------------------------------------------------------------------------ 
    public class GetUserDetailsAsyncTask extends AsyncTask<String, Void, String> 
    { 
     private FragmentCallback mFragmentCallback; 

     public GetUserDetailsAsyncTask (FragmentCallback fragmentCallback) 
     { 
      mFragmentCallback = fragmentCallback; 
     } 


     @Override 
     protected String doInBackground(String... urls) 
     { 
      String output = null; 
      for (String url : urls) 
      { 
       output = sendDataToServer(url); 
      } 
      return output; 
     } 


     @Override 
     protected void onPostExecute (String output) 
     { 
      super.onPostExecute(output); 
      mFragmentCallback.onTaskDone(); 
      txtViewUserFullName.setText("output"); 
     } 


     private String sendDataToServer(String url) 
     { 
      String output = null; 

      try 
      { 
       DefaultHttpClient httpClient = new DefaultHttpClient(); 
       HttpPost httpPost = new HttpPost(url); 

       List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2); 

       nameValuePairs.add(new BasicNameValuePair("user_email", currentUserEmail)); 

       httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 

       // Execute HTTP Post Request 
       HttpResponse response = httpClient.execute(httpPost); 

       HttpEntity httpEntity = response.getEntity(); 
       output = EntityUtils.toString(httpEntity); 
      } 
      catch (ClientProtocolException e) 
      { 
        e.printStackTrace(); 
      } 
      catch (IOException e) 
      { 
        e.printStackTrace(); 
      } 
      return output; 
     } 
    } 
} 
+0

和'mFragmentCallback.onTaskDone(...)'調用? – Selvin

+0

我錯誤地刪除了該行。該行在'onPostExecute'方法內。但它仍然不更新UI –

+0

,因爲傳遞給'GetUserDetailsAsyncTask'構造函數的'FragmentCallback.onTaskDone(...)'的實現是空的/什麼也不做... – Selvin

回答