gpt4 book ai didi

java - 将一个方法的输出传递到同一线程中的另一个方法

转载 作者:行者123 更新时间:2023-12-02 10:45:55 24 4
gpt4 key购买 nike

我的异步任务的 doinBackround 方法中有两个方法。
第一种方法是用于从云数据库检索值。第二种方法用于在 msqlite 中保存值。

我的问题是,当执行第二个方法时,第一个方法将无法在需要时产生值,因此 null 被传递。请看一下代码 fragment 。

    @Override
protected Void doInBackground(Param... params) {
try {
List<Object> objectlist = mAsyncTaskFireDB.getobjectlist(params[0]);
// Output of this method to be passed into 2nd method.
Object[] listarray = new Object[objectlist.size()];
for(Integer i=0;i<objectlist.size();i++)
{
listarray[i] = objectlist.get(i);
}
mCat_messageDao.insertAll(listarray);
// 2nd method : Value of 1st method should come here however
getting null here

已检查并用谷歌搜索,但没有找到正确的解决方案。我想知道处理这种常见情况的最佳方法是什么。提前感谢您的帮助。

编辑

  Asynch Class Code below
private static class insertAsyncTaskFireDB extends AsyncTask<Chat_Message,Void, Void> {

private Firestore_dB mAsyncTaskFireDB;
private Chat_MessageDao mCat_messageDao;
private OnChatMsgreadFStoredB onChatMsglistner;
insertAsyncTaskFireDB(Firestore_dB dB,Chat_MessageDao mChat_messageDao,OnChatMsgreadFStoredB calback) {
mAsyncTaskFireDB = dB;
mCat_messageDao = mChat_messageDao;
onChatMsglistner = calback;
}
@Override
protected Void doInBackground(final Chat_Message... params) {

if(params[0].groupID == null)
{
params[0].setGroupID(mAsyncTaskFireDB.getChatMsgforSingleGrp(params[0].tempgrpID));
}
else {
try {
mAsyncTaskFireDB.get_chat_message(params[0], new OnChatMsgreadFStoredB() {
@Override
public List<Chat_Message> onMsgreadCompleteFstoredB(List<Chat_Message> chat_messages) {
Chat_Message[] msgarray = new Chat_Message[chat_messages.size()];

for(Integer i=0;i<chat_messages.size();i++)
{
msgarray[i] = chat_messages.get(i);
}

mCat_messageDao.insertAll(msgarray);
return null;
}
});
}
catch(Error e){Log.d(TAG, "Error is Asynch Class fetcing details from Sqlite"+e);}

}
return null;
}
}

最佳答案

看起来您可以从主线程访问get_chat_message,因为它是基于监听器的,因此在保存数据时,您只需要在主线程以外的地方执行该部分。请尝试以下

mAsyncTaskFireDB.get_chat_message(params[0], new OnChatMsgreadFStoredB() {
@Override
public List<Chat_Message> onMsgreadCompleteFstoredB(List<Chat_Message> chat_messages) {
Chat_Message[] msgarray = new Chat_Message[chat_messages.size()];
for(Integer i=0;i<chat_messages.size();i++)
{
msgarray[i] = chat_messages.get(i);
}
new DBTask(msgarray).execute();
return null;
}
});

class DBTask extends AsyncTask<Void,Void, Void> {
Chat_Message[] msgarray;
public DBTask(Chat_Message[] data){
msgarray = data;
}

@Override
protected Void doInBackground(Void ...voids) {
mCat_messageDao.insertAll(msgarray);
}
}

关于java - 将一个方法的输出传递到同一线程中的另一个方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52576505/

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