gpt4 book ai didi

Java(安卓): calling a function from Context without cast

转载 作者:行者123 更新时间:2023-12-01 15:39:10 24 4
gpt4 key购买 nike

首先 - 我在 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);

有什么办法可以做到这一点,还是我做了一些根本错误的事情?

谢谢。

最佳答案

目前,您的 api 类在其默认构造函数中接受 Context 对象。使用一个包含回调方法的新类扩展 Context 会更有意义,然后您可以在子类(例如 SomeClass)中重写该方法,这样就不需要在 api 类中进行转换。例如:

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

关于Java(安卓): calling a function from Context without cast,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8364083/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com