2014-05-23 46 views
0

我正在嘗試使用此方法從Microsoft Azure中提取數據。問題在於它有時會非常慢,我需要共享偏好中的這些數據來執行應用程序中的其他任何操作。我如何創建一個等待數據獲取的加載對話框?我試着把這個方法放在AsyncTask doInBackground()方法中,但是對話框會在一毫秒後出現然後消失。什麼是正確的方法來做到這一點?我正在閱讀stackoverflow上的類似主題,但從未找到解決方案。在AsyncTask中提取數據

謝謝!

private class LoadViewTask extends AsyncTask<String, Void, Boolean> 
    { 
     private ProgressDialog dialog; 
     private MainActivity activity; 

     public LoadViewTask(MainActivity activity) { 

      this.activity = activity; 
      context = activity; 
      dialog = new ProgressDialog(context); 
     } 
     private Context context; 
     @Override 
     protected void onPreExecute() 
     { 
      //Create a new progress dialog 
      dialog = ProgressDialog.show(MainActivity.this,"Loading...", 
        "", false, false); 
     } 

     //The code to be executed in a background thread. 
     @Override 
     protected Boolean doInBackground(final String... args) 
     { 

      try 
      { 

        mClient.invokeApi("getsettings", jObj, new ApiJsonOperationCallback() { 

         @Override 
         public void onCompleted(JsonElement result, Exception error, 
           ServiceFilterResponse response) { 
          SharedPreferences settings = getSharedPreferences("SettingsPrefs", 0); 
          SharedPreferences.Editor editor = settings.edit(); 
          if (error != null) { 
           System.out.println("Error"); 
          } else { 
           JsonObject res = result.getAsJsonObject(); 
           try { 


            if(res.get("gender").toString().equals("null")){ 
             userGender = res.get("gender").toString(); 
             editor.putString("gender", userGender); 
            } else { 
             int index1 = res.get("gender").toString().indexOf("\""); 
             int index2 = res.get("gender").toString().lastIndexOf("\""); 
             editor.putString("gender", res.get("gender").toString().substring(index1+1, index2)); 

            } 
            if(res.get("dob").toString().equals("null")){ 
             userDob = res.get("dob").toString(); 
             editor.putString("dob", userDob); 
            } else { 
             editor.putString("dob", res.get("dob").toString().substring(1, 11)); 

            } 
            if (res.get("club").isJsonNull()) { 
             userClub = 0; 
             editor.putInt("userClub", userClub); 
             System.out.println("userclub is null in MA: "+userClub); 
            } else { 
             editor.putInt("userClub", res.get("club").getAsInt()); 


            } 

            editor.commit(); 
           } catch (Exception e) { 
            Log.e("Error: ", e.toString()); 
           } 
          } 

         } 
        }); 

      } 
      catch (Exception e) 
      { 
       e.printStackTrace(); 
      } 
      return null; 
     } 

     @Override 
     protected void onPostExecute(final Boolean success) 
     { 
      //close the progress dialog 
      dialog.dismiss(); 
     } 
    } 
+0

我沒有看到任何對話框中您的代碼,請發表您的完整代碼 –

+0

我加入了整個代碼現在 – grayFox16

+0

這是什麼mClient.invokeApi? –

回答

0

只要按照這個步驟

1)create方法說loadDataFromServer()並把代碼放在裏面

public void loadDataFromServer() { 
     dialog = ProgressDialog.show(MainActivity.this, "Loading...", "", false, false); 

     try { 

      mClient.invokeApi("getsettings", jObj, new ApiJsonOperationCallback() { 

       @Override 
       public void onCompleted(JsonElement result, Exception error, ServiceFilterResponse response) { 
        SharedPreferences settings = getSharedPreferences("SettingsPrefs", 0); 
        SharedPreferences.Editor editor = settings.edit(); 
        if (error != null) { 
         System.out.println("Error"); 
        } else { 
         JsonObject res = result.getAsJsonObject(); 
         try { 

          if (res.get("gender").toString().equals("null")) { 
           userGender = res.get("gender").toString(); 
           editor.putString("gender", userGender); 
          } else { 
           int index1 = res.get("gender").toString().indexOf("\""); 
           int index2 = res.get("gender").toString().lastIndexOf("\""); 
           editor.putString("gender", res.get("gender").toString().substring(index1 + 1, index2)); 

          } 
          if (res.get("dob").toString().equals("null")) { 
           userDob = res.get("dob").toString(); 
           editor.putString("dob", userDob); 
          } else { 
           editor.putString("dob", res.get("dob").toString().substring(1, 11)); 

          } 
          if (res.get("club").isJsonNull()) { 
           userClub = 0; 
           editor.putInt("userClub", userClub); 
           System.out.println("userclub is null in MA: " + userClub); 
          } else { 
           editor.putInt("userClub", res.get("club").getAsInt()); 

          } 

          editor.commit(); 

          dialog.dismiss(); ///DISMISS DIALOG HERE 
         } catch (Exception e) { 
          Log.e("Error: ", e.toString()); 
         } 
        } 

       } 
      }); 

     } catch (Exception e) { 
      e.printStackTrace(); 
     } 

    } 

2)C所有這種方法如

protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     loadDataFromServer(); 

    } 

3)解除onCompleted()方法內的對話框。 (我已經添加了該行)。只需複製該方法並調用它即可。

+0

是的,只要我寫了評論,我意識到你在想什麼:)我現在正在嘗試這個.. – grayFox16

+0

哇這是一個簡單的解決方案,我永遠不會出現與它..它的作品,非常感謝你! – grayFox16

+0

很高興知道這個作品! –

0

創建ProgressDialogshow()它調用mClient.invokeApidismiss()收到關於onCompleted已完成所有必需的過程

+0

我已經做到了,你可以看到我的編輯 – grayFox16

0

嘗試設置不確定的爲true,

//Create a new progress dialog 
      dialog = ProgressDialog.show(MainActivity.this,"Loading...", 
        "", true, false);