【问题标题】:Add data to recyclerView from Sqlite in realtime?从 Sqlite 向 recyclerView 实时添加数据?
【发布时间】:2017-07-21 13:58:25
【问题描述】:

我制作了一个应用程序,它从 TCP 客户端 接收一些数据到我的 TCP 服务器,该服务器将数据存储在 SQlite DB ,实际上我已经创建了一个 recyclerView 来可视化所有数据,但现在我的 问题 是我尝试用 2 周时间来实时刷新 recyclerView,我的意思是如果TCP 客户端 将向我的 TCP 服务器 发送一个新包,如果 我正在使用 recyclerView 进行活动,则数据必须被动态添加。
我还将接受关于如何改进我的应用的任何类型的提示和建议。 实际上,这是我在 Android 中创建的第一个应用程序。

HERE你可以找到我的Server(TCPServer),RecyclerViewAdapter,Adapter(构造函数),allert.java(我调用RecyclerViewAdapter的类。

希望有人能帮助我,非常感谢。

【问题讨论】:

    标签: java android sqlite tcp android-recyclerview


    【解决方案1】:

    尝试发送广播方法。步骤如下:

    1. 在您的活动中创建一个扩展广播接收器的内部类。

      private class ExampleBroadcastReceiver extends BroadcastReceiver {
      @Override
      public void onReceive(Context context, Intent intent) {
          //do stuffs here, e.g. getting extras from intent
      }
      
    2. 在任何方法之外声明该类的实例。

      public class MainActivity extends AppCompatActivity {
      
          private ExampleBroadcastReceiver exampleBroadcastReceiver;
      
          @Override
          protected void onCreate(Bundle savedInstanceState) {
              //stuffs
          }
      
      }
      
    3. 重写 onResume 方法。在这个方法中初始化你刚刚创建的实例。然后,使用意图过滤器注册它。这将确保您的广播接收器在用户打开活动时准备就绪。

      @Override
      protected void onResume() {
          super.onResume();
          IntentFilter filter = new IntentFilter();
          filter.addAction("com.example.MainActivity");   
          exampleBroadcastReceiver = new ExampleBroadcastReceiver();
          LocalBroadcastManager.getInstance(this).registerReceiver(exampleBroadcastReceiver, filter);
      }
      
    4. 覆盖 onPause 方法并取消注册您的接收器。

       @Override
       protected void onPause() {
           super.onPause();
           try {
               LocalBroadcastManager.getInstance(this).unregisterReceiver(exampleBroadcastReceiver);
           } catch (IllegalArgumentException e) {
          if (!e.getMessage().contains("Receiver not registered")) {
              // unexpected, re-throw
              throw e;
      
       }
      
    5. 确保将 ArrayList 用于动态数据。

    6. 每当您从服务器接收数据时,将它们存储在数据库中后,发送一个包含您希望在活动中显示的数据的附加广播。

    已编辑

    我使用 LocalBroadcastManager 的实例注册了接收器。

    【讨论】:

    • 什么是updateReceiver = new UpdateReceiver();?以及在 Server.java 中发送带有附加内容的广播,我只需要按意图传递数据?
    • @I.Mytyuk 抱歉,UpdateReceiver 是我在项目中使用的一个类,我在这里复制了它,但忘记更改它。是的,将您要显示的数据使用附加功能。我也忘记了一些事情,如果接收者应该只接收来自您自己的应用程序的意图,最好使用LocalBroadcastManager 注册接收者。我已经编辑了我的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多