0

アプリケーション自体のユーザーからのアクションなしで、URL からの画像のダウンロードが完了した後、意図を開始する必要があります。

これは、最初に画像をダウンロードし、その後インテントを開始する私のアクティビティです。

    //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 は問題なく、イメージを正しくダウンロードしますが、イメージのダウンロード中にインテントを開始するコードの 2 番目の部分でイメージが破損し、例外が発生します。

イメージの準備ができてダウンロードが完了したら、インテントを開始するにはどうすればよいですか?

4

3 に答える 3

1
 public class YourClassName extends AsyncTask<String, Void, String > {

       protected void onPreExecute() { }

       protected String doInBackground(String... params) {}

       protected void onPostExecute(String result) {}
}

メソッドですべてのダウンロードを行い、次のようにメソッドからdoInBackground新しいものを開始します。IntentonPostExecute

Intent i = new Intent(ClassName.this, TheClassToStart.class);
context.startActivity(i); 

画像を新しいアクティビティに簡単に配置したい場合は、次のようにします。

i.putExtras(...)

この助けを願っています!

囲んでいないインスタンスの問題について

別のアクティビティから AsyncTask を開始する場合は、このアクティビティcontextAsyncTaskクラスに渡します。

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(""); 
于 2012-07-25T14:06:12.333 に答える
1

onPostExecuteonPreExecuteなどの機能を持つAsyncTaskを使用する必要があると思います。ダウンロードの前後に簡単に制御できます。

于 2012-07-25T13:41:10.013 に答える
0

のメソッドIntent内に開始コードを配置する必要があります。これにより、コードが適切なタイミングで実行されるようになり、例外処理がはるかに簡単になります。お役に立てれば。AsyncTaskonPostExecute()

于 2012-07-25T13:41:27.410 に答える