我需要在完成从网址下载图片后开始我的意图,而不需要应用程序用户的任何操作。
这是我的活动,首先会下载图像,之后它将启动意图。
//download image then start decod intent
public void download(View v)
{
//first download image
new MyAsnyc().execute();
//then start this intent
final Handler handler=new Handler();
final Runnable r = new Runnable()
{
public void run()
{
{
Intent intent1 = new Intent(Test_PROJECTActivity.this, DecodeActivity.class);
File path = Environment
.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);
File file = new File(path, "DemoPictureX.png");
Log.d("file", file.getAbsolutePath());
intent1.putExtra("file", file.getAbsolutePath());
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
startActivity(intent1);
}
}
};
handler.postDelayed(r, 5000);
}
MyAsnyc运行正常并正确下载图像,但第二部分来自下载图像时启动意图的代码,因此图像将被破坏,从而导致异常。
我如何让意图启动ONCE图像准备就绪并完成下载?
答案 0 :(得分:1)
我认为您应该使用 AsyncTask ,它具有 onPostExecute , onPreExecute 等功能。您可以轻松控制下载前后的内容
答案 1 :(得分:1)
public class YourClassName extends AsyncTask<String, Void, String > {
protected void onPreExecute() { }
protected String doInBackground(String... params) {}
protected void onPostExecute(String result) {}
}
使用doInBackground
方法完成所有下载内容并从Intent
方法开始新的onPostExecute
,如下所示:
Intent i = new Intent(ClassName.this, TheClassToStart.class);
context.startActivity(i);
如果您想将图片放到新活动中,请执行以下操作:
i.putExtras(...)
希望这有帮助!
关于无封闭实例的问题
如果您从其他活动启动AsyncTask,请将此活动的context
传递给AsyncTask
类。
public class YourClassName extends AsyncTask<String, Void, String > {
Context mContext;
public YourClassName(Context mContext) {
this.mContext = mContext;
}
//other methods
}
从第一个Activity
开始,以这种方式调用AsyncTask
扩展的类:
new YourClassName(getApplicationContext()).execute("");
答案 2 :(得分:0)
您应该将Intent
起始代码放在AsyncTask
的{{1}}方法中。这将确保代码在正确的时间执行,并使异常处理更容易。希望这会有所帮助。