-4

我正在使用的 Android 程序有问题。下面的方法在 MyActivity 中。MyActivity 有一个扩展 AsyncTask 的内部类 InnerClass。在 InnerClass 的 doInBackground 方法中,我搜索了一个数据库。该搜索的结果被传递给这个方法 processSearchResult。除了最后一行抛出 NullPointerException 之外,一切正常。我在创建按钮时尝试使用 getApplicationContext() 代替它,但它仍然抛出异常。我对其进行了调试,发现问题出在 android.content.ContextWrapper 类中。在getApplicationContext() 方法中是调用mBase.getApplicationContext。问题是变量 mBase 为空。使用 this 关键字时,仍然会调用此方法,并且 mBase 仍然为空。谁能告诉我为什么 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);
4

3 回答 3

2

您不能从您需要的doInBackground方法更新用户界面,而是从方法更新它。AsyncTaskpublishProgressonProgressUpdate

我如何发布我的进度doInBackground

publishProgress(0); //Assuming progress is 0

从那以后我在哪里更新 UI?

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

可能与您的想法无关。我所做的是Context在我的代码中保留一个私有全局变量以供将来参考,如下所示:

private Context x = this; 
于 2012-05-18T04:12:55.860 回答
1

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

于 2012-05-18T04:11:34.313 回答
1

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

Button button = new Button(MyActivity.this);
于 2012-05-18T04:14:48.943 回答