首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何从IntentService类更新编辑文本?

如何从IntentService类更新编辑文本?
EN

Stack Overflow用户
提问于 2018-06-01 15:41:28
回答 2查看 66关注 0票数 0

我正在制作一个聊天应用程序,并使用意图服务发送消息到firebase数据库,即使活动被销毁。当上传成功时,我想在IntentService类的Edittext中清除文本,但不知道怎么做。

酸性类代码

代码语言:javascript
复制
Intent sendmsgService = new Intent(getApplicationContext(),SendMessageService.class);
        sendmsgService.putExtra("msg",message);
        sendmsgService.putExtra("time",time);
        sendmsgService.putExtra("cuser",current_user);
        sendmsgService.putExtra("otheruser",otherusername);
        startService(sendmsgService);

IntentService类代码

代码语言:javascript
复制
    public class SendMessageService extends IntentService {
DatabaseReference msgDatabase , mDatabase;
String current_user,otherusername,message,time;

public SendMessageService() {
    super("SendMessageService");
    mDatabase = FirebaseDatabase.getInstance().getReference();
    msgDatabase = mDatabase.child("messages").child(current_user).child(otherusername);
}

@Override
protected void onHandleIntent(@Nullable Intent intent) {
    assert intent!=null;
    message = intent.getStringExtra("msg");
    time = intent.getStringExtra("time");
    current_user = intent.getStringExtra("cuser");
    otherusername = intent.getStringExtra("otheruser");
    DatabaseReference push_database =  msgDatabase.push();
    String msg_push = push_database.getKey();
    DatabaseReference d = FirebaseDatabase.getInstance().getReference();
    String cuser = current_user+"/"+otherusername+"/";
    String ouser = otherusername+"/"+current_user+"/";
    Map<String,Object> chatitems = new HashMap<>();
    chatitems.put("seen",false);
    chatitems.put("msg",message);
    chatitems.put("from",current_user);
    Map<String,Object> msgitemmap = new HashMap<>();
    chatitems.put("time", ServerValue.TIMESTAMP);
    msgitemmap.put("servertime",ServerValue.TIMESTAMP);
    msgitemmap.put("time",time);
    msgitemmap.put("msg",message);
    msgitemmap.put("from",current_user);
    msgitemmap.put("to",otherusername);
    msgitemmap.put("seen",false);
    msgitemmap.put("key",msg_push);
    Map<String,Object> chatmap = new HashMap<>();
    chatmap.put("chatlist/"+cuser,chatitems);
    chatmap.put("chatlist/"+ouser,chatitems);
    chatmap.put("messages/"+cuser+msg_push,msgitemmap);
    chatmap.put("messages/"+ouser+msg_push,msgitemmap);
    d.updateChildren(chatmap).addOnSuccessListener(new OnSuccessListener<Void>() {
        @Override
        public void onSuccess(Void aVoid) {

               //Here i want to clear the edittext 

        }
    });
}}

如果有任何其他解决方案,请提出建议。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-06-01 15:49:24

Intent服务在后台线程上运行,而不是在main(UI)线程上运行,但我们可以使用处理程序机制向activity发送/更新数据。要将数据发送到activity,您需要在activity中声明handler,如下所示:

代码语言:javascript
复制
Handler handler = new Handler() {
    @Override
    public void handleMessage(Message msg) {
            Bundle reply = msg.getData();
                            // do whatever with the bundle here
            }
};

在intent服务类中,以这种方式传递数据:

代码语言:javascript
复制
Bundle bundle = intent.getExtras();
    if (bundle != null) {
        Messenger messenger = (Messenger) bundle.get("messenger");
        Message msg = Message.obtain();
        msg.setData(data); //put the data here
        try {
            messenger.send(msg);
        } catch (RemoteException e) {
            Log.i("error", "error");
        }
    }

最重要的是从活动调用意图服务,将处理程序传递给它:

代码语言:javascript
复制
Intent intent = new Intent(this, IntentService1.class);
        intent.putExtra("messenger", new Messenger(handler));
        startService(intent);

希望这能对你有所帮助

票数 0
EN

Stack Overflow用户

发布于 2018-06-01 15:52:46

简单的解决方案是使用Broadcast Reciever在您的activity类中声明这一点

代码语言:javascript
复制
BroadcastReceiver broadCastNewMessage = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            // do your stuff here
            edittext.setText("");

        }
    };

现在在onCreate()中注册以下内容

代码语言:javascript
复制
registerReceiver(this.broadCastNewMessage, new IntentFilter("uploading_done"));

onDestroy()

代码语言:javascript
复制
unregisterReceiver(broadCastNewMessage);

现在,从要更新活动的服务类中调用此方法

代码语言:javascript
复制
sendBroadcast(new Intent().setAction("uploading_done"));
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50638430

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档