实时从Sqlite向recyclerView添加数据?

时间:2017-07-21 13:58:26

标签: java android sqlite tcp android-recyclerview

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

HERE您可以找到我的recyclerView(TCPServer),ServerRecyclerViewAdapter(构造函数),Adapter(我调用{{1}的类}}

希望有人能够帮助我,并且感到非常感激。

1 个答案:

答案 0 :(得分:1)

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

  1. 创建一个在您的活动中扩展BroadcastReceiver的内部类。

    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方法。初始化您刚在此方法中创建的实例。然后,使用intent-filter注册它。这将确保用户打开活动时您的广播接收器就绪。

    @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. 每当您从服务器接收数据后,将数据存储到数据库中后,发送带有附加内容的广播,其中包含您要在活动中显示的数据。

  7. <强> EDITED

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