gpt4 book ai didi

android - 进度对话框 - AsyncTask

转载 作者:行者123 更新时间:2023-11-29 21:03:58 24 4
gpt4 key购买 nike

我正在将 ActionBar Tablistener 与 ViewPager 结合使用,并且我有三个 fragment 。

启动时,我的应用程序正在从填充 fragment 中的 ListView 的位置下载我的 XML 文件数据源。

当我启动应用程序时,如何在 AsyncTask 中下载我的 XML 文件(当互联网连接速度较慢时)时添加简单的进度对话框,以便我的 Activity 在下载 xml 后运行?

目前我正在使用 SystemClock.sleep(2760); 所以有足够的时间以正常的连接速度下载...

我的主要 Activity :

public class MainActivity extends FragmentActivity implements ActionBar.TabListener {

TextView mSearchText;

ViewPager viewPager=null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

viewPager = (ViewPager) findViewById(R.id.pager);

final ActionBar actionBar=getActionBar();

actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
actionBar.setDisplayShowTitleEnabled(false);

addTabs(actionBar);
viewPager.setAdapter(new MyAdapter(getSupportFragmentManager()));
viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int i, float v, int i2) {
Log.d("VIVZ","onPageScrolled "+i+" "+v+" "+i2);
}

@Override
public void onPageSelected(int i) {
actionBar.setSelectedNavigationItem(i);
Log.d("VIVZ","onPageSelected "+i);
}

@Override
public void onPageScrollStateChanged(int i) {
if(i==ViewPager.SCROLL_STATE_IDLE)
Log.d("VIVZ","onPageScrollStateChanged scroll state idle "+i);
if(i==ViewPager.SCROLL_STATE_DRAGGING)
Log.d("VIVZ","onPageScrollStateChanged scroll state dragging "+i);
if(i==ViewPager.SCROLL_STATE_SETTLING)
Log.d("VIVZ","onPageScrollStateChanged scroll state settling "+i);
}
});


if(isNetworkAvailable()){
Log.i("mobAppModel", "starting download Task");
AppDownloadTask download = new AppDownloadTask();
download.execute();
SystemClock.sleep(2760);
}
}

private boolean isNetworkAvailable() {
ConnectivityManager connectivityManager
= (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
return activeNetworkInfo != null && activeNetworkInfo.isConnected();
}
private class AppDownloadTask extends AsyncTask<Void, Void, Void>{
@Override
protected Void doInBackground(Void... arg0) {
//Download the file
try {
Downloader.DownloadFromUrl("https://URL_on_kategorijeXML.xml", openFileOutput("XMLsource.xml", Context.MODE_PRIVATE));
} catch (FileNotFoundException e) {
e.printStackTrace();
}

return null;
}

}

最佳答案

AsyncTask 有 3 个主要的基本重写方法..

1) onPreExecute

2) 做背景

3) onPostExecute

onPreExcute 在 AsyncTask 开始运行时获得调用..在 doInBackGround 之前..所以在这里你可以显示你的进度对话框..

doInBackground :在这里您可以处理您的服务或任何其他长流程。例如调用网络服务。它不适用于 UI 线程。

onPostExecute :它在 doInbackGround 完成后被调用。所以在这里你可以隐藏进度条。它在 UI 线程上工作。

例如

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

protected void onPreExecute() {
showDialog();
}

protected Void doInBackground(Void... args) {
//Download the file
try {
Downloader.DownloadFromUrl("https://URL_on_kategorijeXML.xml", openFileOutput("XMLsource.xml", Context.MODE_PRIVATE));
} catch (FileNotFoundException e) {
e.printStackTrace();
}

}

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

protected void onPostExecute(Void result) {
//dismiss dialog..
}
}

关于android - 进度对话框 - AsyncTask,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25098052/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com