我尝试创建一个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}}
答案 0 :(得分:0)
如果AsyncTask代码作为内部类在Fragment / Activity中编写,最好使用YourActivityName.this而不是Raghunandan评论的上下文。
如果代码是在Activity / Fragment之外编写的,则可以使用BaseApplicition上下文,如果使用Activity上下文可能会泄漏活动。当活动在任务结束前关闭时,就会发生这种情况。
答案 1 :(得分:0)
只需使用YourActivityName.this,而不是将上下文传递给AsyncTask。