Toast.makeText活动上下文错误?

时间:2013-01-24 11:47:29

标签: android android-activity

我是Android,Eclipse和Java的新手(十年前我读过一本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?
  3. 我想我要打自己并说Doh!后来,但我现在已经对自己视而不见了:)

5 个答案:

答案 0 :(得分:2)

您的问题是Status是公开的enum of AsyncTask。因此,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();
    }
  }
}

答案 1 :(得分:2)

Toast.makeText(com.package.name.Status.this, "Toast message", Toast.LENGTH_LONG).show();

com.package.name替换为您的应用程序的包名称。

答案 2 :(得分:1)

尝试将上下文传递给AsyncTask,包括它在&#34; PostToTwitter&#34;构造函数。例如,当您实例化类时,传递getApplicationContext()(或#34;此&#34;,如果从Activity调用)。然后,在Toast中使用该上下文,而不是Status.this:

      Toast.makeText(context, result, Toast.LENGTH_LONG).show();

答案 3 :(得分:0)

toast在onPostExecute()方法中获取错误使用ProgressDialoge或通过

进行调试
  

Log.d( “结果”,结果+ “”);

答案 4 :(得分:0)

你的asyntask是否是Status Activity中的内部类,然后使用public关键字作为

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不是内部类,那么你需要在构造函数中传递它