我是一名长期(8 年)C# 开发人员,涉足一点 android 开发。这是我第一次使用 Java,当涉及到内部类时,我的思维方式有点难以转变。
我正在尝试编写一个类来包装一个 RESTful API,以便从一个类型安全的地方在服务器上执行各种调用,例如
string jsonResult = APIWrapper.getItems("category 1");
我想使用 AsyncTask 在后台获取内容。
所以一种方法是这样 - 在 APIWrapper 中使用 AsyncTask:
class ActivityA extends Activity {
myButton.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
//get stuff and use the onPostExecute inside the APIWrapper
new APIWrapper().GetItems("Category A", MyGetItemsCallBack);
}});
function void MyGetItemsCallBack(String result)
{
//render the result in the activity context, in a listview or something
}
}
无论如何,我不确定回调/委托(delegate)的想法在 Java 中是否有效!
另一种方法是在 Activity 中使用 AsyncTask 并创建 APIWrapper 来像 worker/helper 一样获取数据:
class ActivityA extends Activity {
myButton.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
//get stuff and use the onProcessComplete inside the APIWrapper
new GetItems("Category A");
}});
class GetItems(String theCategory) extends AsyncTask
{
doInBackground()
{
return new APIWrapper().GetItems(theCategory);
}
onPostExecute(String result)
{
//render the result in the activity context, in a listview or something
}
}
}
谁能帮我做出正确的选择?
最佳答案
Java 没有像 C# 委托(delegate)这样的东西,所以你的第一个提议是不可能的。
标准的解决方案是声明一个可以作为回调传递的接口(interface):
public interface MyCallback {
void gotItems(String data);
}
然后你可以做类似的事情
class ActivityA extends Activity {
myButton.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
//get stuff and use the onPostExecute inside the APIWrapper
new APIWrapper().getItems("Category A", new MyGetItemsCallBack());
}});
private class MyGetItemsCallBack implements MyCallback {
public void gotItems(String result) {
// bla bla bla
}
}
}
或者你可以使用匿名类:
class ActivityA extends Activity {
myButton.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
//get stuff and use the onPostExecute inside the APIWrapper
new APIWrapper().getItems("Category A", new MyCallback() {
public void gotItems(String result) {
// bla bla bla
}
});
}});
如果您需要多种不同类型的回调,您可以使用泛型来避免声明许多小接口(interface):
interface Callback<T> {
void run(T arg);
}
class ActivityA extends Activity {
myButton.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
//get stuff and use the onPostExecute inside the APIWrapper
new APIWrapper().getItems("Category A", new Callback<String>() {
public void run(String result) {
// bla bla bla
}
});
}});
关于java - 如何在 Java/Android 中重用内部类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13101928/