【问题标题】:how to use interface to communicate between activity and sqlite databse helper class如何使用接口在活动和sqlite数据库助手类之间进行通信
【发布时间】:2019-07-24 06:22:17
【问题描述】:

我是安卓新手。目前我正在开发使用 sqlitedb 的 android 应用程序,因为应用程序用户可能没有连续的互联网连接。

我的问题是 - 有一个 ReportActivity 在 recyclerview 中显示来自 sqlite 的所有数据。
有启动AddReport Activity 的添加选项。当我将该新报告添加到服务器时,我开始使用从服务器获取数据并存储到 sqlite 的服务。并返回报告活动。
现在我想在 sqlite db 更新后更新ReportActivity 中的数据。我尝试使用界面,但它给出了nullpointer exception
那么我如何在其中使用界面。我不想使用广播接收器。

【问题讨论】:

  • Sqlite with android 无法在数据更改时获得通知,您需要使用带有 Live 数据的 Room DB,它会在您更新数据库时通知您。
  • 请分享您的逻辑、代码、部分sn-p,以便我们更好地理解

标签: java android database sqlite interface


【解决方案1】:

您可以使用startActivityForResult() 并在finish() AddReportActivity 上返回一个意图以在ReportActivity 上再次触发刷新/获取数据:

报告活动:

public class ReportActivity extends Activity {

  private static final int REQUEST_ADD_REPORT = 1;
  ...
  private void showAddReport() {
    Intent intent = new Intent(this, AddReportActivity.class);
    startActivityForResult(intent, REQUEST_ADD_REPORT);
  }

  @Override
  protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == REQUEST_ADD_REPORT &&
         resultCode == ACTIVITY_OK) {
       // trigger refresh
    }
  }
}

添加报告活动

public class AddReportActivity extends Activity {
  ...
  private void addReport() {
     // do some logic on adding the report
     setResult(ACTIVITY_OK);
     finish();
  }
}

或者您可以直接覆盖ReportActivity 上的onResume() 并将从sqlite 中提取的数据移到那里,这样每次活动恢复时,它总是会获取更新的数据。

onResume()被调用时,您可以参考android activity lifecycle

【讨论】:

  • 但是我们不知道服务什么时候会更新sqlite中的数据。更新后我们需要刷新报告活动。
  • 如果是这种情况,你可以使用 websocket 并在服务更新 sqlite 上的数据时监听它。
猜你喜欢
  • 2021-03-14
  • 2013-10-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多