1

これは私が使用しているクラスです

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;
    }
 }
4

1 に答える 1

3

のメソッドでColorsXMPP_AfterLoginクラスをインスタンス化することはできません(両方がアクティビティにあると想定しています)。問題は、それが内部クラスとして宣言されており、内部クラスが作成される囲みクラスのインスタンスを必要とすることです (それらはこの接続を必要とします)。静的メソッドにはこのインスタンスがないため、コンパイラはそのエラーをスローします。問題を解決するためのいくつかのオプションがあります。私が推奨するのは、ネストされたクラスとして作成する( のように宣言する) か、それを独自の Java ファイルに完全に移動することです ( への接続が必要な場合は、参照を渡すだけです)。のコンストラクターのそれに)。staticalertContactsXmppColorsXMPP_AfterLoginalertColorsXMPP_AfterLoginContactsXmpppublic static class ColorsXMPP_AfterLogin...ActivityContextctxAsyncTask

変数を使用して、次のようなctxインスタンスを作成することもできます。ColorsXMPP_AfterLogin

ctx.new ColorsXMPP_AfterLogin();
于 2013-01-01T09:32:40.530 に答える