这是我正在使用的类(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_AfterLoginstatic方法中实例化alert类(我假设两者都在ContactsXmpp Activity 中)。问题在于ColorsXMPP_AfterLogin被声明为内部类,并且内部类需要创建封闭类的实例(它们需要此连接)。在静态alert方法中,您没有此实例,因此编译器会抛出该错误。您有几种解决问题的方法,我建议的一种方法是将ColorsXMPP_AfterLogin设置为ContactsXmpp中的嵌套类(声明为public static class ColorsXMPP_AfterLogin...),或者将其完全移动到自己的java文件中(如果需要连接到ActivityContext只需在ctx的构造函数中传递对该AsyncTask的引用)。

您还可以使用ctx变量来创建ColorsXMPP_AfterLogin的实例,例如:

ctx.new ColorsXMPP_AfterLogin();

关于android - 没有可访问的ContactsXmpp类型的封闭实例?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14107999/

10-09 01:11