Java 从Sqlite实时向recyclerView添加数据?

Java 从Sqlite实时向recyclerView添加数据?,java,android,sqlite,tcp,android-recyclerview,Java,Android,Sqlite,Tcp,Android Recyclerview,我制作了一个应用程序,它正在从TCP客户端接收一些数据,并将数据存储在SQlite DB中,实际上,我已经制作了一个recyclerView来可视化所有数据,但现在我的问题是,我要花两周的时间来实时刷新recyclerView,我的意思是,如果一个TCP客户端将向我的TCP服务器发送一个新包,并且如果我正在使用recyclerView进行活动,则必须动态添加数据。 我还将接受关于如何改进我的应用程序的任何类型的提示和建议。 实际上,这是我在安卓系统中创建的第一个应用程序 您可以找到我的服务器(T

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

您可以找到我的
服务器
(TCPServer)、
回收服务适配器
适配器
(构造函数)、
allert.java
(我调用
回收服务适配器
的类)


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

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

  • 创建一个在活动中扩展BroadcastReceiver的内部类

    private class ExampleBroadcastReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        //do stuffs here, e.g. getting extras from intent
    }
    
    @Override
    protected void onResume() {
        super.onResume();
        IntentFilter filter = new IntentFilter();
        filter.addAction("com.example.MainActivity");   
        exampleBroadcastReceiver = new ExampleBroadcastReceiver();
        LocalBroadcastManager.getInstance(this).registerReceiver(exampleBroadcastReceiver, filter);
    }
    
  • 在任何方法之外声明类的实例

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

    private class ExampleBroadcastReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        //do stuffs here, e.g. getting extras from intent
    }
    
    @Override
    protected void onResume() {
        super.onResume();
        IntentFilter filter = new IntentFilter();
        filter.addAction("com.example.MainActivity");   
        exampleBroadcastReceiver = new ExampleBroadcastReceiver();
        LocalBroadcastManager.getInstance(this).registerReceiver(exampleBroadcastReceiver, filter);
    }
    
  • 重写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;
    
     }
    
  • 确保对动态数据使用ArrayList

  • 每当您从服务器接收数据时,在将数据存储到数据库中后,发送一个包含要在“活动”中显示的数据的附带广播

  • private class ExampleBroadcastReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        //do stuffs here, e.g. getting extras from intent
    }
    
    @Override
    protected void onResume() {
        super.onResume();
        IntentFilter filter = new IntentFilter();
        filter.addAction("com.example.MainActivity");   
        exampleBroadcastReceiver = new ExampleBroadcastReceiver();
        LocalBroadcastManager.getInstance(this).registerReceiver(exampleBroadcastReceiver, filter);
    }
    
    已编辑


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

    什么是
    updateReceiver=newupdateReceiver()
    ?在Server.java中,为了发送带有附加功能的广播,我只需通过intent传递数据?@i.Mytyuk抱歉,UpdateReceiver是我在项目中使用的一个类,我在这里复制了它,但忘了更改它。是的,请使用附加功能放置您想要显示的数据。还有一点我忘了,最好使用
    Lo注册接收器calBroadcastManager
    如果接收者应该只从您自己的应用程序接收意图。我已经编辑了我的答案。