2016-11-21 88 views
-3

我使用的是AsyncTaskVolley調用加載數據後加載。並且還編碼以顯示ProgressDialog。但問題是onPreExecuteonPostExecute如此之快,ProgressDialog不會出現,目前仍是項目是不可見的幾秒鐘後回收站項目將onPostExecute

+4

*我正在使用的AsyncTask內凌空通話* ...爲什麼加載數據裏面你的對話? volley已經是一個異步庫...請學習多線程中的基本流程...... *但問題是onPreExecute和onPostExecute如此之快,以至於ProgressDialog不會出現* ...我很肯定你在任何這個方法調用......讓我猜測:'new Task()。execute(); dialog.dismiss();'或'中doInBackground' – Selvin

+0

異步調用,請提供您的代碼? –

+0

不,我解僱了下onPostExecute –

回答

1

原因的執行你的AsyncTask看起來非常快(速度甚至比你得到的結果是你的請求)可能是通過使用凌空內的AsyncTask您使用凌空的線程使網絡請求而不是異步任務線程。

這將使它看起來像真快執行的異步任務的時候,其實你只是傳遞到另一個線程(凌空的線程),這樣的AsyncTask已完成工作,你還有什麼工作,然後凌空完成它的工作,你會得到結果。

解決方案:

要麼使用Android抽射或使用AsyncTask

正如你可以在volley training docs看有沒有需要AsyncTask

您還可以看到this SO AsyncTask example,確認自doInBackgound()運行中另一個線程,就沒有必要使用抽射或其他異步方法

更新來回答這個問題的意見:

如何使用ProgressDialog與凌空?

其實很容易,因爲在this other說得這麼張貼例如

你只需要兩個步驟:

  1. 您啓動ProgressDialog因爲你把你的凌空請求隊列 ;)

    //請求添加到隊列 rq.add(請求);

    //initialize the progress dialog and show it 
    progressDialog = new ProgressDialog(getActivity()); 
    progressDialog.setMessage("Fetching The File...."); 
    progressDialog.show(); 
    
  2. 你放棄你的OnResponse()

    StringRequest postReq = new StringRequest(Request.Method.POST, "http://httpbin.org/post", new Response.Listener<String>() 
    { 
    
        @Override 
        public void onResponse(String response) { 
         tv.setText(response); // We set the response data in the TextView 
         progressDialog.dismiss(); 
        } 
    }, 
    
    new Response.ErrorListener() { 
    
         @Override 
         public void onErrorResponse(VolleyError error) { 
          Log.e(「Volly Error」,」Error: 」+error.getLocalizedMessage()); 
          progressDialog.dismiss(); 
         } 
    }); 
    
+0

感謝您的回答,現在我想使用凌空通話我沒有選擇。所以,如果我這樣做,那麼我將如何顯示我自己的ProgressDialog –

+0

@AkshayDusane我將更新答案 – HenriqueMS

+0

@AkshayDusane檢查更新的答案 – HenriqueMS

相關問題