首先 - 我是Java的新手,所以如果问题没有意义,请告诉我。
基本上我正在制作一个与我的网络服务进行通信的Android应用程序,因此我已经创建了一个单独的类来处理通信,其中还包括AsyncTask(我已经从代码中删除了很多内容,仅用于预览):
public class api {
private String caller = null;
Context that = null;
api(Context that) {
this.that = that;
this.caller = that.getClass().getSimpleName();
}
void call(String action) {
/* .... */
}
new back().execute(param1, param2);
}
void callback(String action, String result){
that.callback(action, result);
}
public class back extends AsyncTask<String, Void, String> {
public String response = null;
protected String doInBackground(String... params) {
response = connection.executeRequest(params[1]);
return response;
}
protected void onPostExecute(String result) {
callback("a", "b");
}
}
}
当我从应用程序的某些部分使用该类时(让我们说SomeClass.class),我这样做:
api WS = new api(this);
WS.call("....");
它应该执行SomeClass中的函数'callback'。 但这里的关键问题是这一行:
that.callback(action, result);
Eclipse让我在演员阵容中添加“调用者”类的名称:
(SomeClass) that.callback(action, result);
但这对我不起作用,因为我使用来自许多不同类的'api'类,所以理想情况下我需要在演员表中放置一个变量。我在这里得到了“来电者”课程的名称:
this.caller = that.getClass().getSimpleName();
//obviously this won't work:
(this.caller) that.callback(action, result);
无论如何要做到这一点,还是我做了一些根本错误的事情?
谢谢。
答案 0 :(得分:1)
目前,您的api类在其默认构造函数中接受Context对象。使用包含回调方法的新类扩展Context会更有意义,然后可以在子类(例如SomeClass)中覆盖它,这将取消在api类中进行强制转换的需要。 e.g:
public class APIContext extends Context
{
public void callback( String action, String result )
{
/* ... */
}
}
public class SomeClass extends APIContext
{
@Override
public void callback( String action, String result )
{
/* ... */
}
}
public class api
{
private APIContext callerContext = null;
public api( APIContext context )
{
this.callerContext = context;
}
public void callback( String action, String result )
{
callerContext.callback( action, result );
}
}