在doInBackground成功后,OnPostExecute不会调用

时间:2013-09-21 20:28:16

标签: java android performance android-asynctask

我在我的Android应用程序中搜索数据并通过控制台进行调试,当我检查控制台时,我看到doInBackground工作正常,但在它没有调用onPostExecute之后。我不知道因为什么,有人可以帮忙吗?

   protected List<Recipe> doInBackground(Void... params) {
        try {
            List<Recipe> recipes=RecipeService.getRecipes(context,"a");
            if(recipes != null) android.util.Log.i(TAG,"encontrados");
            return recipes;
        } catch (java.io.IOException e) {
            android.util.Log.e(TAG,e.getMessage(),e);
            android.util.Log.i(TAG,"ta akiiiiii");
            com.android.utils.AndroidUtils.AlertDialog(context,R.string.name_io);
        }finally{
            progresso.dismiss();
        }
        return null;
    }


//Update a view


protected void OnPostExecute(List<Recipe> recipes) {
    android.util.Log.i(TAG,"are here");
    for (Recipe recipe : recipes) {
        android.util.Log.i(TAG,"Carro: "+recipe.name);
    }
}

这里的日志永远不会执行,请有一些错误吗? try的{​​{1}}有效。

2 个答案:

答案 0 :(得分:1)

onPostExecute(),而不是OnPostExecute()。在o中使用小写字母onPostExecute()

用以下代码替换您的代码:

@Override
protected void onPostExecute(List<Recipe> recipes) {
    android.util.Log.i(TAG,"are here");
    for (Recipe recipe : recipes) {
        android.util.Log.i(TAG,"Carro: "+recipe.name);
    }
}
如果您尝试覆盖方法,

总是尝试添加@Override注释。通过这种方式,您将知道是否正确编写了方法签名。

答案 1 :(得分:1)

您的方法是大写的,破坏了java约定。实际方法称为onPostExecute()。因为名称不同,所以您实际上没有覆盖该方法。这就是@Override注释如此有用的原因 - 如果您使用它,它会在这里给你一个编译错误。