2014-08-29 3 views
0

Мой текущий проект включает загрузку данных с сервера - это занимает около 20 секунд, поэтому за это время я хочу отобразить индикатор выполнения, чтобы пользователь знал, что происходит. Задача загрузки выполняется внутри DownloadWebpageTask (AsyncTask), и я устанавливаю видимость индикатора выполнения в preExecute(), но она не отображается. Здесь я просматривал всю массу вопросов, и я до сих пор не могу заставить это работать. Если я не скрываю индикатор выполнения в onPostExecute(), я вижу, что происходит - даже если я установил progBar.setVisibility (0) в onPreExecute(), панель фактически не появляется до doInBackground. Я попытался установить TextView в onPreExecute, а также проверить, не работает ли индикатор выполнения, но это также не удалось.Индикатор выполнения не отображается в AsyncTask onPreExecute()

Пожалуйста, кто-нибудь может помочь мне здесь, я полностью застрял!

Это вызывает мое AsyncTask:

public void getDTCs(View view) throws URISyntaxException{  

     DtcListSingleton.getInstance().setData(null); 
     status = "DTC Parsing Not Attempted"; 
     noDTCs = 0; 

     TextView listTitle = (TextView) findViewById(R.id.DTCtitle); 
     String newTitle = "Waiting for DTCs"; 
     listTitle.setText(newTitle); 


     String stringURL = "http://192.168.1.129"; 
     //Check connection 
     ConnectivityManager cMgr = (ConnectivityManager)getSystemService(this.CONNECTIVITY_SERVICE); 
     NetworkInfo netInf = cMgr.getActiveNetworkInfo(); 

     // If connected to network carry on with DTC request 
     if(netInf != null && netInf.isConnected()){ 

      //Download the web page as an InputStream 
      new DownloadWebpageTask().execute(stringURL); 

И это мой AsyncTask:

private class DownloadWebpageTask extends AsyncTask<String,Void,String>{ 
     @Override 
     protected void onPreExecute(){ 
      super.onPreExecute(); 
      progBar = (ProgressBar)findViewById(R.id.loadingDTCs); 
      progBar.setVisibility(0); 
      TextView title = (TextView)findViewById(R.id.DTCtitle); 
      title.setText("Loading DTCs"); 
     } 
     @Override 
     protected String doInBackground(String...urls){ 
      //params[0] is the url 
      try{ 
       return downloadUrl(urls[0]); 
      } 
      catch(IOException e){ 
       return "Unable to retreieve web page. URL may be invalid."; 
      } 

      // DELETE if overcome client.print delay 
      catch (InterruptedException e) { 
       e.printStackTrace(); 
       return "Interrupted Exception from Delaying inputstream"; 
      } 
     } 
     @Override 
     protected void onPostExecute(String result){ 

      AlertDialog.Builder resultURL = new AlertDialog.Builder(ActionReadDTCs.this); 

      resultURL.setTitle("Result of DownloadWebPageTask") 
      .setMessage(result) 

      .setPositiveButton("OK", new DialogInterface.OnClickListener(){ 
       public void onClick(DialogInterface dialog, int id){ 
        progBar = (ProgressBar)findViewById(R.id.loadingDTCs); 
        progBar.setVisibility(8); 
        return; 
       } 
      }) 

      .show(); 
     } 
    } 
+0

Вы попробовали с .setVisibility (View.VISIBLE) – PedroHawk

+0

Ваш минимальный/максимальный SDK и текущая версия Android-версии? –

+0

это изменяет текст? title.setText ("Загрузка DTCs"); –

ответ

0

Пример кода увидеть, если это работает? если это работает это означает, что вы делаете какую-то ошибку, на ваш взгляд, показывая и скрывая

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" > 
    <Button 
     android:id="@+id/btnDownload" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center" 
     android:text="@string/download" 
     android:textSize="14sp" /> 
    <ImageView 
     android:id="@+id/imageView" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:contentDescription="@string/your_image_will_appear_here" /> 
</LinearLayout> 

И ваш класс Java

private class DownloadImageTask extends AsyncTask<String, Void, Bitmap> { 
    /** Reference to the view which should receive the image */ 
    private final WeakReference imageRef;public DownloadImageTask(ImageView imageView) { 
     imageRef = new WeakReference(imageView); 
    } 

    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 
     progressDialog = ProgressDialog.show(DownloadImageActivity.this, "Wait", "Downloading..."); 
    } 

    @Override 
    protected Bitmap doInBackground(String... params) { 
     InputStream input = null; 
     try { 
      URL url = new URL(params[0]); 
      // We open the connection 
      URLConnection conection = url.openConnection(); 
      conection.connect(); 
      input = new BufferedInputStream(url.openStream(), 8192); 
      // we convert the inputStream into bitmap 
      bitmap = BitmapFactory.decodeStream(input); 
      input.close(); 
     } catch (Exception e) { 
      Log.e("Error: ", e.getMessage()); 
     } 
     return bitmap; 
    } 

    /** 
    * After completing background task Dismiss the progress dialog 
    * **/ 
    protected void onPostExecute(Bitmap bitmap) { 
     progressDialog.dismiss(); 
     if (isCancelled()) { 
      bitmap = null; 
     } 

     if (imageRef != null) { 
      ImageView imageView = imageRef.get(); 
      if (imageView != null &amp;&amp; bitmap != null) { 
       imageView.setImageBitmap(bitmap); 
      } else 
       Toast.makeText(DownloadImageActivity.this, "Error while downloading the image!", Toast.LENGTH_LONG).show(); 
     } 
    } 
} 



<uses-permission android:name="android.permission.INTERNET"/> 

See the result

0

Спасибо за ответ, но я понял, моя проблема ,

Я не писал весь свой код - на самом деле я вызывал другую функцию после AsyncTask, и как только я переместил весь код, следующий за new DownloadWebpageTask.execute(String url), в onPostExecute() мой индикатор прогресса появился просто отлично!

Смежные вопросы