【问题标题】:Upload JSON Request as a background task in Flutter上传 JSON 请求作为 Flutter 中的后台任务
【发布时间】:2020-12-28 11:46:10
【问题描述】:

我有一个要求,我想将 JSON 请求数据(从数据库表中获取)上传到服务器并获取响应,根据响应我必须更新本地数据库(sqflite: ^1.2.1)。 我有多个屏幕,我需要根据用户操作在每个屏幕上创建不同的 JSON 请求数据。目前对于相同的场景,我在我的另一个原生 android 应用程序中使用 Intent Service。 在 Flutter Android 应用程序中处理此类场景的基本方法是什么。如果我使用通道并实现 Intent 服务,则无法访问 Android 特定区域中的 sqflite 数据库。如果互联网不可用,我必须继续等待连接,当设备连接时,我需要将所有创建的事件一一上传到服务器。

请有人告诉我在 Flutter 中处理这种特定情况的基本可能方法。

提前致谢

【问题讨论】:

    标签: flutter background-process flutter-android


    【解决方案1】:

    首先使用 sqflite 或 sharedPreferences 在本地保存您的 JSON 请求。将它们同步到您的服务后,将它们从同步队列中删除

    【讨论】:

    • 感谢您的评论。我已经将用户操作作为事件保存在 sqflite 数据库中,然后获取所需的数据来创建 JSON 请求,但是我有数千个 JSON 请求,在这种情况下,我需要后台服务类型机制,它应该在内部处理 JSON 请求同步而不阻塞 UI在颤振中。
    • 我尝试实现 background_fetch 插件,但不幸的是我在实现中遇到了一些问题,所以无法完成。我正在寻找更好的解决方案。
    • 我有一个问题是 sharedpreference 还是 sqflite 在后台使用 flutter_background_services 运行?就像应用程序关闭或销毁,然后从 sqflite 或 sharedpref 获取数据。有人知道吗?
    【解决方案2】:

    我得到了解决方案:我可以通过渠道以原生方式访问 SQFlite 数据库。

    这是flutter中创建的数据库的路径

       "/data/data/{package name}/app_flutter/{database file name}"
    

    所以我们可以像原生一样使用频道访问

      SQLiteDatabase mDatabase= SQLiteDatabase.openDatabase("/data/data/{package name}/app_flutter/{database file name}", null, 0);
    
      Log.i("MainActivity", "mDatabase.isOpen():"+mDatabase.isOpen());//check DB is open or not
      String query = "SELECT * FROM {Table Name}";
      Cursor cursor=mDatabase.rawQuery(query,null);
      if (cursor.moveToFirst()){
        do{
           String data= cursor.getString(cursor.getColumnIndex({Table Column Name}));
           Log.i("MainActivity", "Column Data Value:"+data);
        }while(cursor.moveToNext());
      }
      cursor.close();
    

    所以我会在本机中实现 Service 来实现这个场景。 谢谢你

    【讨论】:

      猜你喜欢
      • 2020-01-28
      • 2015-07-10
      • 1970-01-01
      • 2022-01-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-05
      • 1970-01-01
      相关资源
      最近更新 更多