带参数的AsyncTask出错

时间:2014-04-29 10:16:17

标签: android button android-asynctask onclick android-context

我尝试创建一个AsyncTask Context作为onClick button Alert的参数public static void alertaHorarios(final Context context, final PerfilObj perfil) { AlertDialog.Builder builder = new AlertDialog.Builder(context); LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); View v = inflater.inflate(R.layout.alerta, null); builder.setView(v); sonidos(context); cargarAlerta(context, v, R.drawable.iconodescargar, "Descargar datos", "¿Desea descargar de internet los datos (horarios y tarifas) de " + "<font color='" + context.getResources().getColor(Modulo.cargarColorAplicacion(context, perfil.getColor())) + "'><b>" + context.getResources().getString(R.string.app_name) + "</b></font>?", perfil.getColor()); builder.setPositiveButton("Descargar", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int id) { Modulo.reproducirSonidos(context, perfil.getSonidos(), sound, sonidoBoton); tareaAsincronaInicio task = new tareaAsincronaInicio(context, perfil); task.execute(); }}); builder.setNegativeButton("Cancelar", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { Modulo.reproducirSonidos(context, perfil.getSonidos(), sound, sonidoBoton); } }); AlertDialog dialog = builder.create(); dialog.setCanceledOnTouchOutside(false); dialog.show(); Button b = dialog.getButton(DialogInterface.BUTTON_POSITIVE); if(b != null) { b.setBackgroundResource(COLOR_FONDO_BOTONES); b.setTextSize(TAMANO_FUENTE_BOTONES); b.setTypeface(Modulo.fontPrincipal(context)); b.setTextColor(context.getResources().getColorStateList(COLOR_FUENTE_BOTONES)); } Button b2 = dialog.getButton(DialogInterface.BUTTON_NEGATIVE); if(b2 != null) { b2.setBackgroundResource(COLOR_FONDO_BOTONES); b2.setTextSize(TAMANO_FUENTE_BOTONES); b2.setTypeface(Modulo.fontPrincipal(context)); b2.setTextColor(context.getResources().getColorStateList(COLOR_FUENTE_BOTONES)); } } private class tareaAsincronaInicio extends AsyncTask<Void, Integer, Boolean> { private Context mContext; private PerfilObj perfilObj; public tareaAsincronaInicio (Context context, PerfilObj perfil){ mContext = context; perfilObj = perfil; } ... }

但我收到错误:

  

无法访问类型的封闭实例警报。必须符合资格   使用类型为Alerts的封闭实例(egxnew A()   其中x是警报的实例。)

Alertas.java

{{1}}

2 个答案:

答案 0 :(得分:0)

如果AsyncTask代码作为内部类在Fragment / Activity中编写,最好使用YourActivityName.this而不是Raghunandan评论的上下文。

如果代码是在Activity / Fragment之外编写的,则可以使用BaseApplicition上下文,如果使用Activity上下文可能会泄漏活动。当活动在任务结束前关闭时,就会发生这种情况。

答案 1 :(得分:0)

只需使用YourActivityName.this,而不是将上下文传递给AsyncTask。