创建新按钮

时间:2012-05-18 04:09:51

标签: android android-button android-context

我正在处理我正在处理的Android程序的问题。以下方法是MyActivity。 MyActivity有一个内部类InnerClass,它扩展了AsyncTask。在InnerClass的doInBackground方法中,我搜索数据库。该搜索的结果将传递给此方法processSearchResult。一切正常,除了最后一行抛出NullPointerException。我在创建按钮时尝试使用getApplicationContext()代替这一点,但它仍然抛出了异常。我调试它,发现问题出在android.content.ContextWrapper类中。在getApplicationContext()方法中是一个调用mBase.getApplicationContext。问题是变量mBase为null。使用this关键字时,仍然会调用此方法,并且mBase仍为null。谁能告诉我为什么mBase为空?或者,如果mBase的实际正常为空?

public void processSearchResult(ResultSet result) {
    try {

    int x = 1;
    while (result.next()) {

        String name = result.getString(1);
        String ing = result.getString(2);
        String ins = result.getString(3);
        String notes = result.getString(4);
        String type = result.getString(5);
        String course = result.getString(6);

        Recipe r = new Recipe(name, ing, ins, notes, type, course);
        recipeList.add(r);

        Button button = new Button(this);

3 个答案:

答案 0 :(得分:2)

您无法使用doInBackground所需的AsyncTask方法更新用户界面publishProgress,而是使用onProgressUpdate方法更新用户界面。

如何从doInBackground

发布进度
publishProgress(0); //Assuming progress is 0

从何处更新用户界面?

@Override
protected void onProgressUpdate(Integer... progress){
    //HERE
}

这个可能不会引用您的想法。 我所做的是在我的代码中保留一个私有的全局Context变量,以供将来参考:

private Context x = this; 

答案 1 :(得分:1)

这应该是您的活动的上下文,而不是应用程序上下文。试试MyActivity.this。

答案 2 :(得分:1)

要创建按钮,您应该使用ActivityContext,尝试

Button button = new Button(MyActivity.this);