我正在处理我正在处理的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);
答案 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);