我是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
中使用该homeActivity
或HomeActivity.this
在点击监听器内部,“
this
”是点击监听器的引用。