2011-04-14 80 views
0

我的進度條顯示但不移動。這裏是我的代碼:android中的進度條

package com.net.pvr; 

import java.io.BufferedInputStream; 
import java.io.InputStream; 
import java.net.URL; 
import java.net.URLConnection; 

import org.apache.http.util.ByteArrayBuffer; 

import android.app.Activity; 
import android.app.ProgressDialog; 
import android.os.Bundle; 
import android.os.Handler; 
import android.os.Message; 
import android.util.Log; 

public class HTTPLocation implements Runnable { 
private static HTTPLocation instance; 


private ProgressDialog myProgressDialog; 
private ByteArrayBuffer baf; 
private Activity activity; 
public String url; 
public String id; 
private HTTPLocation() 
{ 
} 
public Activity getActivity() { 
    return activity; 
} 

public void setActivity(Activity activity) { 
    this.activity = activity; 
} 


private Handler handler; 
public String getId() { 
    return id; 
} 

public void setId(String id) { 
    this.id = id; 
} 

public String getUrl() { 
    return url; 
} 

public void setUrl(String url) { 
    this.url = url; 
} 


public Handler getHandler() { 
    return handler; 
} 

public void setHandler(Handler handler) { 
    this.handler = handler; 
} 

public static HTTPLocation getInstance() { 

     instance = new HTTPLocation(); 
     return instance; 
} 

    public void init() { 


    myProgressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); 
    myProgressDialog.setProgress(0); 
    myProgressDialog.incrementProgressBy(5); 
    myProgressDialog.setMax(100); 

     Thread t = new Thread(this); 

    t.start(); 

} 

@Override 
public void run() { 
    try { 

     String url1 = this.getUrl(); 
     System.out.println("url "+url1); 
     URL url = new URL(url1); 

     URLConnection urlConn = url.openConnection(); 
     urlConn.setConnectTimeout(10000); 
     InputStream is = urlConn.getInputStream(); 
     BufferedInputStream bis = new BufferedInputStream(is); 
     baf = new ByteArrayBuffer(1000);    
     int current = 0; 
     while ((current = bis.read()) != -1) { 
      baf.append((byte) current); 
     } 
     bis.close(); 
     is.close(); 

    } catch (Exception e) { 
     e.printStackTrace(); 
    } finally { 
     Bundle bundle = new Bundle(); 


     if(baf!=null){ 
      bundle.putByteArray("data", baf.toByteArray()); 
     }else{ 
      bundle.putByteArray("data", null); 
     } 

     Message messagepush = Message.obtain(); 
     messagepush.what = 200; 
     messagepush.setData(bundle); 
     messagepush.setTarget(handler); 
     myProgressDialog.setIndeterminate(false); 

     myProgressDialog.dismiss(); 
     messagepush.sendToTarget(); 
    } 
} 

} 

回答

2

我有同樣的問題,請嘗試使用AsyncTask的線程可以通過它和prorgress對話框中容易處理會很好地工作。

private class className extends AsyncTask<Void, Void, Void>{ 

    @Override 
    protected Integer doInBackground(Void... arg0) { 
       // your function 

    } 

    @Override 
    protected void onPostExecute(Integer result){ 
     loadingProgress.dismiss(); 

    } 

    @Override 
    protected void onPreExecute(){ 
     loadingProgress = ProgressDialog.show(getContext(), "", "Please wait...",true); 
    } 

} 
0

下面是從谷歌代碼:

private class DownloadFilesTask extends AsyncTask<URL, Integer, Long> { 
    protected Long doInBackground(URL... urls) { 
     int count = urls.length; 
     long totalSize = 0; 
     for (int i = 0; i < count; i++) { 
      totalSize += Downloader.downloadFile(urls[i]); 
      publishProgress((int) ((i/(float) count) * 100)); 
     } 
     return totalSize; 
    } 

    protected void onProgressUpdate(Integer... progress) { 
     setProgressPercent(progress[0]); 
    } 

    protected void onPostExecute(Long result) { 
     showDialog("Downloaded " + result + " bytes"); 
    } 
} 

你應該把你的代碼更新這裏onProgressUpdate(Integer... progress)進度條。

您可以在這裏閱讀更多關於它的信息AsyncTask,這裏Painless Threading

您應該僅在UI線程上更新UI元素,或使用AsyncTask類或Handler