4

**更新: (以下を参照)** 数日間探し回っていますが、これに対する明確な答えが見つかりません。可能だと言う人もいれば、達成できないと言う人もいます。私はこれに夢中になっています。

私が欲しいのは、 AsyncTaskTask にプログレスバーを外部クラスに表示させることだけです。これを行うには、メイン クラスでわかるようにコンテキストを渡します。しかし、私が何をしようとしても得られNullPointerExceptionます。

実用的なコード例は大歓迎です。ありがとうございました

ちなみにAndroid 2.2を使用しています。

主要:

import android.app.Activity;
import android.os.Bundle;

public class AsyncDemo extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        new AsyncClass(this).execute();
    }
}

AsyncClass.java

import android.app.ProgressDialog;
import android.content.Context;
import android.os.AsyncTask;
import android.os.SystemClock;

public class AsyncClass extends AsyncTask<Void, String, Void> {
    private Context context;
    ProgressDialog dialog = new ProgressDialog(context);

    public AsyncClass(Context cxt) {
        context = cxt;
    }

    @Override
    protected void onPreExecute() {
        dialog.setTitle("Please wait");
        dialog.show();
    }

    @Override
    protected Void doInBackground(Void... unused) {
        SystemClock.sleep(2000);
        return (null);
    }

    @Override
    protected void onPostExecute(Void unused) {
        dialog.dismiss();
    }
}

更新: フォローアップの質問があります: 上記のコードを使用して、onPostExecute メソッドからメイン クラスに値を返すことは可能ですか? (初心者になってすみません)私はこのようなことを試しました:

String result = new AsyncClass(this).execute();

次に、文字列を返すメソッド。しかし、私はそれをすることができません:

Type mismatch: cannot convert from AsyncTask<String,Void,Void> to String

この問題に取り組むにはどうすればよいですか? ありがとう。

4

3 に答える 3

13

ProgressDialognull コンテキストでを作成していました。次のコードは私にとってはうまくいきました。

public class AsyncClass extends AsyncTask<Void, String, Void> {
    private Context context;
    ProgressDialog dialog;

        public AsyncClass(Context cxt) {
            context = cxt;
            dialog = new ProgressDialog(context);
        }

        @Override
        protected void onPreExecute() {
            dialog.setTitle("Please wait");
            dialog.show();
        }

        @Override
        protected Void doInBackground(Void... unused) {
            SystemClock.sleep(2000);
            return (null);
        }

        @Override
        protected void onPostExecute(Void unused) {
            dialog.dismiss();
        }
    }
于 2010-07-27T19:55:20.150 に答える
1

そのフォローアップの質問に答えたいと思います

フォローアップの質問があります: 上記のコードを使用して、onPostExecute メソッドからメイン クラスに値を返すことは可能ですか? (初心者になってすみません)私はこのようなことを試しました:

String result = new AsyncClass(this).execute();

私は自分のコードでこれを行いました。

AsyncClass ac=new AsyncClass();
                    
ac.execute("");

String rslt=ac.get();

好きな場所でこのコードを呼び出します。

public class AsynchClass extends AsyncTask <String,Integer,String>
{

    public String result=null;


    @Override
    protected void onPreExecute() {
    // TODO Auto-generated method stub  
     
    }

    protected String doInBackground(String... params) 
    {

            // Do all your background task here

            return result;
                    
    }
    @Override
     
    protected void onProgressUpdate(Integer... values) {
    
      
    }

    protected void onPostExecute(String result) {
    
    }
}

                
             
于 2013-03-03T07:02:41.733 に答える