我是java和android开发的新手,有一个问题,让我解释一下。
我有自定义接口(interface)和自定义类,将其用作监听器。

在我的HomeActivity中,我在自定义类上调用方法,并且该类通过监听器(接口(interface))进行响应,这是简短的版本:

public class HomeActivity extends Activity implements WebClientResponseListener {
    private User user;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        //....
        // I call my class and add this as a listener:
        MyWebServiceClient mws = new MyWebServiceClient(getApplicationContext());
        mws.getProducts(this.user.getToken(), this)
    }
    //....
    @Override
    public void onDataDownloadSuccess(JSONObject jsonObject) {
        Log.d("DATA", "SUCCESS");
    }
}

当我运行它时,一切正常。调用了onDataDownloadSuccess方法,我可以看到日志输出。

当我尝试从OnClickListener运行它时,出现此问题:
private void sendRequest() {
    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setTitle(getString(R.string.request_info_title));
    builder.setItems(items, this);
    //.....
    builder.create().show();
}

稍后在同一 Activity 中,我有:
public void onClick(DialogInterface dialogInterface, int which) {
    MyWebServiceClient mws = new MyWebServiceClient(getApplicationContext());
     mws.getProducts(user.getToken(), this)
}

在这种情况下,不会调用我的监听器onDataDownloadSuccess方法。
我可以在控制台中看到:







我一直在寻找解决方案,例如,我已经尝试了一些方法:
//in OnClick
mws.getProducts(user.getToken(), HomeActivity.this);

我创建了私有(private)变量HomeActivity,并在onCreate中进行了调用
homeActivity = this;

后来在onClick中,我试图通过homeActivity代替
但没有运气。
提前致谢。

最佳答案

由于您需要context而不是activity,因此变量必须为:

Context homeActivity;

或者
Context context;

然后在onCreate()
context=this;

在您的 Activity 或context中使用该homeActivityHomeActivity.this
在点击监听器内部,“this”是点击监听器的引用。

10-08 09:14