当前位置: 首页 > 知识库问答 >
问题:

从asynctask回调到活动[重复]

闾丘京
2023-03-14

我想做的是以下几点:

自活动:

MessageCentre centre = new MessageCentre();
centre.getMessages(1); 

%1是登录到我的应用程序服务器的设备的Id。服务器然后以JSONArray格式检索与此ID关联的所有消息。我将这些JSONObjects转换为我构建的Message类,并将所有这些新对象保存为MessageCentre类实例中的静态数组。

ArrayAdapter a = new ArrayAdapter(getApplicationContext(),R.id.item_layout, centre.getMessagesList());
listview.setAdapter(a);

所以我可以想出一些方法来处理这个问题:

1)一种使活动在没有ANR的情况下等待一段时间的方法

2)在某种回调方法中,以某种方式将数据返回到活动,而不是onPostExecute()方法

任何帮助都是感激的伙计们,非常感谢!

共有1个答案

仇浩旷
2023-03-14

您可以创建接口来进行回调。

示例:

创建类AsynctAskMessage:

public class AsyncTaskMessage extends AsyncTask<Void, Void, Void> {


    Context context;
    public OnMessageListener mListener;

    public interface OnMessageListener {
        void messageCallback(ArrayList<String> messageList); // you can change the parameter here. depends on what you want.
    }

    public AsyncTaskMessage(Context context) {
        this.context = context;
        mListener = (OnMessageListener) context;
    }

    @Override
    public void onPreExecute() {

    }

    @Override 
    protected void onPostExecute() {
        // your code goes here for the callback.
        // messageList - A list of messages.
        mListener.messageCallback(messageList);
    }
}
public class MessageCentre {

    Context context;
    public void MessageCentre(Context context) {
        this.context = context;
    }

    public void getMessages(int id) {
        // You said your asyncTask goes here.
        AsyncTaskMessage async = new AsyncTaskMessage(context);
        async.execute();
    }
}
// A class where your ArrrayAdapter.
public class MainActivity extends AppCompatActivity implements AsyncTaskMessage.OnMessageListener {

    //.. 

    public void displayMessage() {
        MessageCentre centre = new MessageCentre(this);
        centre.getMessages(1); 
    }

    @Override
    public void messageCallback(ArrayList<String> messageList) {
        Log.i("MainActivity", "Response: " + messageList.toString());
        ArrayAdapter a = new ArrayAdapter(getApplicationContext(),R.id.item_layout, messageList);
        listview.setAdapter(a);
    }
}
 类似资料:
  • 问题内容: 抱歉再次困扰您,但是我仍然找不到从活动到服务的回调方法… 找到了类似的问题- 如何在Android中定义回调? 但还不确定如何将该示例集成到我的项目中。 任何建议或指向清晰教程的链接都很棒! 问题答案: 在示例中显示的这种回调(观察者模式)在服务和活动之间不起作用。当您从类A 创建了 类B 的实例 并希望将回调从B发送到A 时,请使用观察者模式。 关于服务和活动,情况完全不同。AFAI

  • 问题内容: 我有以下不在活动内的asynctask类。在活动中,我正在初始化asynctask,并且希望asynctask将回调报告回我的活动。可能吗?还是asynctask必须与活动位于同一类文件中? 像这样吗 问题答案: 您可以创建一个,将其传递给(在构造函数中),然后在中调用 例如: 您的界面: 您的活动: 和您的AsyncTask: 编辑 由于此答案非常受欢迎,因此我想补充一些内容。 如果

  • 我把一个额外的动作从第一个动作传给第二个动作。我验证传递给第二个活动的内容。我让它按我的计划运行。我的问题是如何将字符串值传递回第一个活动。 这里我把第一个活动称为第二个活动。 在第二个活动中,我像这样从第一个活动接收数据 我对从第一个活动传递的额外内容执行验证,并希望将单个字符串传递回第一个活动。在第二个活动中,我加载了一个RecyclerViewer并在我尝试过的onClick上。 我的问题至

  • 我有以下问题:当我从一个活动返回到另一个活动时,我需要打开菜单的某些元素。例如: 现在,当我在我的活动中单击“向上”时,菜单的第一个元素总是打开的(跑步者被拉到的地方)。我需要打开这样的元素,它是在打开新活动之前打开的。例如,我在Articles菜单元素中选择了一篇文章,在单击new activity之后,我想再次打开Articles元素。我试图通过点击后退按钮来实现这一点: 但没用怎么了?

  • 我看了其他问题,但我无法澄清从另一个任务调用一个任务的疑问,我有以下代码: parseJSON是一个任务,当我运行程序时,它什么也不做,甚至不调用任务,这就像Android为了安全而忽略的一样。

  • 我试图从碎片屏幕调用一个活动中的方法。 我有一个名为myMethod()的方法,它位于名为MyActivity的活动中;我有一个片段叫做Screen1Fragment。 我想给我的活动打电话。从Screen1Fragment内部创建myMethod(),但我不确定如何执行此操作。 以前,Screen1Fragment是一个活动,因此我扩展了MyActivity,以便可以直接调用myMethod()