1

私はAndroid、Eclipse、および一部Javaを初めて使用します(10年前にJavaの本を読み、使用したことはありません)。このチュートリアルに従っています:http://ofps.oreilly.com/titles/9781449390501/Android_User_Interface.html

私はこのコードを持っています:

public class Status extends Activity implements OnClickListener, TextWatcher {
  // ...
  class PostToTwitter extends AsyncTask<String, Integer, String> {
    // ...
    protected void onPostExecute(String result) { 
      Toast.makeText(Status.this, result, Toast.LENGTH_LONG).show();
    }
  }
}

Toast.makeText行の横に次のエラーが表示されます。

  • Toast型のメソッドmakeText(Context、CharSequence、int)は、引数(AsyncTask.Status、String、int)には適用できません。
  • タイプAsyncTask.Statusの囲んでいるインスタンスはスコープ内でアクセスできません
  1. エラーが発生する理由がわかりませんか?
  2. Statusアクティビティコンテキストを渡すときにAsyncTaskについて言及するのはなぜですか?

平手打ちしてドウと言うつもりだと思います!後で、しかし私は今それで自分自身を盲目的に主演しました:)

4

5 に答える 5

2

問題は、それがAsyncTaskStatusのパブリック列挙型であるということです。したがって、Javaはあなたの活動を文脈としてとらえません。コンテキストのインスタンスをで保持してみてください。AsyncTask

ここでこのコードを試してください:

public class Status extends Activity implements OnClickListener, TextWatcher {
  private Context context;
  public void onCreate(...) {
    context=this;
    //...
  }

  // ...
  class PostToTwitter extends AsyncTask<String, Integer, String> {
    // ...
    protected void onPostExecute(String result) { 
        Toast.makeText(context, result, Toast.LENGTH_LONG).show();
    }
  }
}
于 2013-01-24T11:50:45.557 に答える
2
Toast.makeText(com.package.name.Status.this, "Toast message", Toast.LENGTH_LONG).show();

com.package.nameアプリケーションのパッケージ名に置き換えます。

于 2013-01-24T12:48:54.780 に答える
1

「PostToTwitter」コンストラクターにコンテキストを含めて、コンテキストをAsyncTaskに渡してみてください。たとえば、クラスをインスタンス化するときに、getApplicationContext()(または、アクティビティから呼び出す場合は「this」)を渡します。次に、Status.thisの代わりに、トーストでそのコンテキストを使用します。

      Toast.makeText(context, result, Toast.LENGTH_LONG).show();
于 2013-01-24T12:14:06.467 に答える
0

asyntaskがStatusActivityの内部クラスであるかどうか、およびその場合はpublicキーワードをasで使用する

public class PostToTwitter extends AsyncTask<String, Integer, String> {
// ...
    public void onPostExecute(String result) { 
    Toast.makeText(Status.this, result, Toast.LENGTH_LONG).show();
  }
 }

Status.thisに問題はなく、Asyntaskが内部クラスでない場合は、コンストラクターで次のように渡す必要があります。

于 2013-01-24T12:07:20.983 に答える
0

onPostExecute()メソッドでエラーが発生するトーストは、ProgressDialogeを使用するか、次の方法でデバッグします。

Log.d( "result"、result + "");

于 2013-01-24T11:52:04.180 に答える