如何在android中使用Asynctask从web下载文本数据时,根据下载的数据更新ProgressBar



我想将progressbar wrt显示为从web下载的数据。无论我是必须动态创建,还是必须通过在xml中创建Id来引用。我有点困惑。这是我的密码。你能告诉我怎么做吗?

package com.example.telugumovies;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
import java.util.ArrayList;
import java.util.List;
import android.app.ListActivity;
import android.app.ProgressDialog;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.ProgressBar;
import android.widget.Toast;
public class MainActivity extends ListActivity {
String category ="";
String[] cat = {"Upcoming","Telugu"};
private List<String> categories ;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    categories = new ArrayList<String>();
    int i=0;
    for(i=0;i<2;i++)
    {
        categories.add(cat[i]+" Movies");
    }
    ArrayAdapter<String> myAdapter = new ArrayAdapter <String>(this, 
            R.layout.listview_rowlayout, R.id.tv, categories);
     // assign the list adapter
     setListAdapter(myAdapter);
}
 // when an item of the list is clicked
@Override
protected void onListItemClick(ListView list, View view, int position, long id) {
    super.onListItemClick(list, view, position, id);
    Bundle giveCategory = new Bundle();
    if(position == 0)
    {
        try {
            new GetData().execute();
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        finally
        {
        }
    }
    else if(position == 1)
    {
        giveCategory.putString("cate", cat[position]);
        Intent a = new Intent(MainActivity.this,Show_Years.class);
        a.putExtras(giveCategory);
        startActivity(a);   
    }
    else
    {
        Toast.makeText(getApplicationContext(), "Sorry This option is not Available for Now ",
               Toast.LENGTH_SHORT).show();
    }
    //String selectedItem = (String) getListView().getItemAtPosition(position);

}
class GetData extends AsyncTask<String,Integer,String>
{
    ProgressBar pb ;
    protected void onPreExecute()
    {
        pb = new ProgressBar(MainActivity.this);
        pb.setVisibility(View.VISIBLE);
    }
    @Override
    protected String doInBackground(String... arg0) {
        // TODO Auto-generated method stub
        String alldata = "";
        int flag=1;
        String data = "";
          URL url = null;
          int i=0,j=0,count=0,c=0;
          URLConnection con = null;
          InputStream is = null;
          String line = null;
        try
        {
            url = new URL("http://www.filmibeat.com/telugu/upcoming-movies.html");
            con = url.openConnection();
            is = con.getInputStream();
            BufferedReader br = new BufferedReader(new InputStreamReader(is));
            while ((line = br.readLine()) != null) {
               //System.out.println(line);
                alldata = "";
                flag=0;
                if(line.contains("<h3"))
                {j=0;
                flag=1;
                    for(i=0;i<line.length();i++)
                {
                    if(line.charAt(i)=='<')
                    {
                        j=1;
                    }
                    else if(j==1 && line.charAt(i)=='>')
                    {
                        j=0;
                    }
                    else if(j==0)
                    {
                        alldata = alldata + (line.charAt(i));
                    }
                }
                }
                data=data+alldata;
                if(flag==1)
                {
                data=data+"$";
                }
        }
            System.out.println(data);
            return data;
        }
            catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        finally
        {
            return data;
        }
        }
    protected void onPostExecute(String someting)
    {
        Bundle givedata = new Bundle();
        givedata.putString("moviedata",someting);
        Intent a = new Intent(MainActivity.this,Show_upcomingmovies.class);
        a.putExtras(givedata);
        pb.setVisibility(View.INVISIBLE);
        startActivity(a);
    }
    }
@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

}

使用动态创建的进度条或从id引用进度条都可以。

使用来自XML的引用可以让你对进度条的外观有更多的控制,因为你会根据自己的需要专门设计它(比如外观,它必须出现的地方等)。但如果不是这样,你也可以在当前代码中使用动态创建的进度条。

有很多方法。一种是将ProgressDialog定义为AsyncTask中的字段,然后将其添加到onPreExecute():

pDialog = new ProgressDialog(this);
pDialog.setMessage("some downloading massage");
pDialog.setIndeterminate(false);
pDialog.setMax(100); //you can adjust this
pDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
pDialog.setCancelable(false);
pDialog.show();

然后,您可以通过覆盖AsyncTask中的updateProgress()并调用pDialog.setProgress()来更新进度;

最新更新