Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/208.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 进度对话框-异步任务_Android_Xml_Android Fragments_Android Asynctask - Fatal编程技术网

Android 进度对话框-异步任务

Android 进度对话框-异步任务,android,xml,android-fragments,android-asynctask,Android,Xml,Android Fragments,Android Asynctask,我将ActionBar Tablistener与ViewPager一起使用,我有三个片段 启动时,我的应用程序正在下载我的XML文件数据源,从中填充我的ListView in fragments 启动应用程序时,在AsyncTask中下载XML文件时(当internet连接缓慢时),如何添加“作为简单进度”对话框,以便在下载XML后运行活动 目前我正在使用SystemClock.sleep(2760)因此有足够的时间以正常连接速度下载 我的主要活动: public class MainActiv

我将ActionBar Tablistener与ViewPager一起使用,我有三个片段

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

启动应用程序时,在AsyncTask中下载XML文件时(当internet连接缓慢时),如何添加“作为简单进度”对话框,以便在下载XML后运行活动

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

我的主要活动:

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;
        } 

    }   
public类MainActivity扩展FragmentActivity实现ActionBar.TabListener{
TextView-mSearchText;
ViewPager ViewPager=null;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
viewPager=(viewPager)findViewById(R.id.pager);
最终ActionBar ActionBar=getActionBar();
actionBar.setNavigationMode(actionBar.NAVIGATION\u MODE\u选项卡);
actionBar.setDisplayShowTitleEnabled(false);
addTabs(actionBar);
setAdapter(新的MyAdapter(getSupportFragmentManager());
viewPager.setOnPageChangeListener(新的viewPager.OnPageChangeListener(){
@凌驾
页面上的公共无效已滚动(整数i、浮点v、整数i2){
Log.d(“VIVZ”,“onPageScrolled”+i+“”+v+“”+i2);
}
@凌驾
已选择页面上的公共无效(int i){
actionBar.setSelectedNavigationItem(i);
Log.d(“VIVZ”,“onPageSelected”+i);
}
@凌驾
页面上的公共无效状态已更改(int i){
如果(i==ViewPager.SCROLL\u STATE\u IDLE)
Log.d(“VIVZ”,“onPageScrollStateChanged滚动状态空闲”+i);
如果(i==ViewPager.SCROLL\u STATE\u drawing)
Log.d(“VIVZ”,“onPageScrollStateChanged滚动状态拖动”+i);
如果(i==ViewPager.SCROLL\u STATE\u)
Log.d(“VIVZ”,“onPageScrollStateChanged scroll state Setting”+i);
}
});
如果(isNetworkAvailable()){
Log.i(“mobAppModel”,“开始下载任务”);
AppDownloadTask download=新建AppDownloadTask();
下载.execute();
系统时钟。睡眠(2760);
}
}
专用布尔值isNetworkAvailable(){
连接管理器连接管理器
=(ConnectionManager)getSystemService(Context.CONNECTIVITY_服务);
NetworkInfo activeNetworkInfo=connectivityManager.getActiveNetworkInfo();
返回activeNetworkInfo!=null&&activeNetworkInfo.isConnected();
} 
私有类AppDownloadTask扩展了AsyncTask{
@凌驾
受保护的Void doInBackground(Void…arg0){
//下载该文件
试一试{
Downloader.DownloadFromUrl(“https://URL_on_kategorijeXML.xml,openFileOutput(“XMLsource.xml”,Context.MODE_PRIVATE));
}catch(filenotfounde异常){
e、 printStackTrace();
}
返回null;
} 
}   

}

就我个人而言,我会使用一个在asynctask的postexecute中调用的接口,然后在onpreexecute中启动一个进度对话框,然后在postexecute中调用接口类之前关闭它,在主任务中实现它,并在触发事件时运行下一个代码

乙二醇


不要在
活动中调用
SystemClock.sleep()
。一旦创建()
方法,您将完全阻塞UI,并可能导致应用程序崩溃。您需要为
onPostExecute
提供
AsyncTask
方法实现。您的
onPostExecute
将在UI线程上运行,因此它可以调用
活动中的一个方法,该方法将关闭对话框并更新适配器或其他任何内容。考虑使用一个由<代码> AycCastase<代码>支持的加载器,因为它将是生命周期感知的。如果没有,则需要确保您的
活动
正确处理
异步任务
的生命周期清理(即调用
异步任务.cancel()
异步任务有3个主要的基本重写方法)

1) 预先执行

2) 背景

3) onPostExecute

onPreExcute在AsyncTask开始运行时获取调用..在doInBackGround.之前。。因此,您可以在此处显示进度对话框

doInBackground:在这里,您可以处理您的服务或任何其他长流程。e、 打电话给Webservice。这不是UI线程上的工作

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

e、 g

私有类下载文件任务扩展异步任务{
受保护的void onPreExecute(){
showDialog();
} 
受保护的Void doInBackground(Void…args){
//下载该文件
试一试{
Downloader.DownloadFromUrl(“https://URL_on_kategorijeXML.xml,openFileOutput(“XMLsource.xml”,Context.MODE_PRIVATE));
}catch(filenotfounde异常){
e、 printStackTrace();
}
}
受保护的void onProgressUpdate(整数…进度){
setProgressPercent(进度[0]);
}
受保护的void onPostExecute(void结果){
//取消对话框。。
}
}
Main Class

public void taskdone();

Async Task

OnPostExecute

MyInterface.taskdone();


Interface

public taskdone();
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..
 }
 }