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

标签 java android

我的异步任务的 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/

相关文章:

java - 方法返回字符串与字符串变量之间的区别

android - 这个内存分配。代码在 x86 上运行完美,但在 Android 上定期导致段错误

android - 无法将类型为 java.lang.String 的对象转换为类型为 com.example.messenger.messenger.Friends

android - 如何在 Android 6.0 Marshmallow 中访问相机?

java - 在heroku 或cloudfoundry 上进行多 war 部署?

java - Spring无法从app-config-text.xml找到app-config.xml

java - 是否有 Spring Boot 标志来禁用宽松的 Jackson 对 LocalDate 值的时间解析?

Java android - 用于在未注册 Activity 时通知的 Eclipse 插件?

java - 日期格式格式不正确

java - 文件必须存储在我的文件管理器应用程序当前打开的文件夹中