Android如何使代码等待一段时间再执行?直接贴程序麻烦高人来看一下。

h284872260 2015-10-08 09:25:16

package com.artifex.mupdfdemo;
import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import com.example.down.HttpDownloader;

public class MainActivity extends Activity {
private Button mybut=null;
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.buttonpdf);
this.mybut=(Button)super.findViewById(R.id.but);
mybut.setOnClickListener(new Show());
}

public class Show implements OnClickListener{
public void onClick(View v)
{
new Thread()
{
public void run()
{
try
{
HttpDownloader httpDownloader=new HttpDownloader();
int result=httpDownloader.download("http://222.26.7.82:8081/PDF/test.pdf","ckpdf/","test.pdf");
System.out.println(result);
}
catch(Exception e)
{
e.printStackTrace();
}
}
}.start();


Uri uri = Uri.parse("file://mnt/sdcard/ckpdf/test.pdf");
Intent intent = new Intent(MainActivity.this,MuPDFActivity.class);
intent.setAction(Intent.ACTION_VIEW);
intent.setData(uri);
startActivity(intent); }
}
}



我这个程序想要实现一个功能,就是点击一下按钮,会从服务器中下载一个PDF文件存放到本地,存放到本地后,用intent打开这个刚刚下载下来的PDF文件。 但是执行程序,找不到pdf文件,点击第二次的时候才可以找到。 怎样让这两个步骤顺序执行,一步就可以完成?
...全文
1054 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
peter_nj_RD 2015-10-08
  • 打赏
  • 举报
回复
推荐使用handler的postDelayed方法,通过延迟发送处理消息来实现 http://blog.csdn.net/tdstds/article/details/38355443
哎,真难 2015-10-08
  • 打赏
  • 举报
回复
启动线程就可以,或者handler
StoneHui_ 2015-10-08
  • 打赏
  • 举报
回复
把打开的操作放到下载线程里执行就可以了。线程是异步执行的,打开的操作放在外面会导致还没下载完成就执行打开操作。把打开跟下载放到同一个线程里就行了。如果不想放在线程里,推荐使用Handler。
月盡天明 2015-10-08
  • 打赏
  • 举报
回复
引用 6 楼 h284872260 的回复:
[quote=引用 5 楼 crazy1235 的回复:] 开异步线程去下载PDF。 没有下载完成的时候不让点击button,下载完成之后通知UI线程,然后在让点击button。
能否具体点? 怎么判断下载没下载完呢?[/quote] 你一开始下载的时候不让点击 然后下载完之后,有回调,然后你在通知主线程让button可以点击。
StoneHui_ 2015-10-08
  • 打赏
  • 举报
回复
引用 8 楼 luosiye312 的回复:
这样写:
public class MainActivity extends ActionBarActivity {

	private Handler mHandler = new Handler();
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		mHandler.postDelayed(new Runnable(){

			@Override
			public void run() {
				Uri uri = Uri.parse("file://mnt/sdcard/ckpdf/test.pdf");  
	            Intent intent = new Intent(MainActivity.this,MuPDFActivity.class);  
	            intent.setAction(Intent.ACTION_VIEW);  
	            intent.setData(uri);  
	            startActivity(intent);
			}
		}, 3000);//延迟3s,时间自己定
		try {
			HttpDownloader httpDownloader=new HttpDownloader();
			httpDownloader.download("http://222.26.7.82:8081/PDF/test.pdf","ckpdf/","test.pdf");
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

}
这样延迟肯定不行的,下载时间是不确定的,要是网络不好或者文件太大,3秒过后去打开的还是找不到文件
luosiye312 2015-10-08
  • 打赏
  • 举报
回复
这样写:
public class MainActivity extends ActionBarActivity {

	private Handler mHandler = new Handler();
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		mHandler.postDelayed(new Runnable(){

			@Override
			public void run() {
				Uri uri = Uri.parse("file://mnt/sdcard/ckpdf/test.pdf");  
	            Intent intent = new Intent(MainActivity.this,MuPDFActivity.class);  
	            intent.setAction(Intent.ACTION_VIEW);  
	            intent.setData(uri);  
	            startActivity(intent);
			}
		}, 3000);//延迟3s,时间自己定
		try {
			HttpDownloader httpDownloader=new HttpDownloader();
			httpDownloader.download("http://222.26.7.82:8081/PDF/test.pdf","ckpdf/","test.pdf");
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

}
h284872260 2015-10-08
  • 打赏
  • 举报
回复
引用 1 楼 u014165119 的回复:
把打开的操作放到下载线程里执行就可以了。线程是异步执行的,打开的操作放在外面会导致还没下载完成就执行打开操作。把打开跟下载放到同一个线程里就行了。如果不想放在线程里,推荐使用Handler。
你说的好像对啊,我试试, Handler我也去查一下。
h284872260 2015-10-08
  • 打赏
  • 举报
回复
引用 5 楼 crazy1235 的回复:
开异步线程去下载PDF。 没有下载完成的时候不让点击button,下载完成之后通知UI线程,然后在让点击button。
能否具体点? 怎么判断下载没下载完呢?
月盡天明 2015-10-08
  • 打赏
  • 举报
回复
开异步线程去下载PDF。 没有下载完成的时候不让点击button,下载完成之后通知UI线程,然后在让点击button。
is140u 2015-10-08
  • 打赏
  • 举报
回复
使用asynctask在子线程进行下载吧

80,471

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧