这是我正在使用的类(class)
public class ContactsXmpp extends SherlockFragmentActivity {
private static Context ctx;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.contacts_xmpp_sip);
ctx = this;
}
从此方法调用asynctask时出现错误。这是错误
No enclosing instance of type ContactsXmpp is accessible. Must qualify the allocation with an enclosing instance of type ContactsXmpp (e.g. x.new A() where x is an instance of ContactsXmpp).
private static void alert( String str, final String name ) {
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(ctx);
alertDialogBuilder.setMessage(str + ": " + name);
alertDialogBuilder.setCancelable(false)
.setPositiveButton("Yes",new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,int id) {
Subscription(name);
new ColorsXMPP_AfterLogin().execute(); ///** error getting here..
}
});
alertDialogBuilder.setNegativeButton("No", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
unSubscribe(name);
}
});
AlertDialog alertDialog = alertDialogBuilder.create();
alertDialog.show();
}
这里的异步任务
public class ColorsXMPP_AfterLogin extends AsyncTask<AfterLogging, Void, Void> {
private ProgressDialog _dialog;
@Override
protected void onPreExecute() {
super.onPreExecute();
Log.e(TAG, " GmailXMPP_AfterLogin onPreExecute" );
}
@Override
protected void onPostExecute(Void feed) {
//ProgressBar_hide();
_dialog.dismiss();
Log.e(TAG, " GmailXMPP_AfterLogin onPostExecute" );
}
@Override
protected Void doInBackground(AfterLogging... arg0) {
Log.e(TAG, " GmailXMPP_AfterLogin doInBackground" );
return null;
}
}
最佳答案
您无法在ColorsXMPP_AfterLogin
的static
方法中实例化alert
类(我假设两者都在ContactsXmpp
Activity 中)。问题在于ColorsXMPP_AfterLogin
被声明为内部类,并且内部类需要创建封闭类的实例(它们需要此连接)。在静态alert
方法中,您没有此实例,因此编译器会抛出该错误。您有几种解决问题的方法,我建议的一种方法是将ColorsXMPP_AfterLogin
设置为ContactsXmpp
中的嵌套类(声明为public static class ColorsXMPP_AfterLogin...
),或者将其完全移动到自己的java文件中(如果需要连接到Activity
的Context
只需在ctx
的构造函数中传递对该AsyncTask
的引用)。
您还可以使用ctx
变量来创建ColorsXMPP_AfterLogin
的实例,例如:
ctx.new ColorsXMPP_AfterLogin();
关于android - 没有可访问的ContactsXmpp类型的封闭实例?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14107999/