Java 在新的可运行线程中,刷卡后卡不会被移除

Java 在新的可运行线程中,刷卡后卡不会被移除,java,android,multithreading,Java,Android,Multithreading,我在gridlayoutmanager中有卡片视图。我在刷卡时实现了刷卡ie。我的应用程序运行良好,直到我将代码放入新线程以提高性能。 当我这么做的时候,卡被移除了,但它在2-3秒后再次出现。 最初,当我刷卡时,卡会被取消,下一张卡会出现 我的代码: ItemTouchHelper.SimpleCallback simpleItemTouchCallback = new ItemTouchHelper.SimpleCallback(0, ItemTouchHelper.UP )

我在gridlayoutmanager中有卡片视图。我在刷卡时实现了刷卡ie。我的应用程序运行良好,直到我将代码放入新线程以提高性能。 当我这么做的时候,卡被移除了,但它在2-3秒后再次出现。 最初,当我刷卡时,卡会被取消,下一张卡会出现

我的代码:

ItemTouchHelper.SimpleCallback simpleItemTouchCallback = new ItemTouchHelper.SimpleCallback(0, ItemTouchHelper.UP )
        {

            @Override
            public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target)
            {
                Toast.makeText(getApplicationContext(), "on Move", Toast.LENGTH_SHORT).show();
                return false;
            }

            @Override
            public void onSwiped(final RecyclerView.ViewHolder viewHolder, int swipeDir)
            {

                Toast.makeText(getApplicationContext(), "Task Status changed to COMPLETE", Toast.LENGTH_LONG).show();

                new Thread(new Runnable() {
                    @Override
                    public void run() {
                        String username = getIntent().getStringExtra("username");
                        String password = getIntent().getStringExtra("password");
                        try {
                            restApi=new RallyRestApi(new URI("https://rally1.rallydev.com"),username,password);
                            JsonObject updatedValues = new JsonObject();
                            updatedValues.addProperty("State", "Completed");
                            UpdateRequest taskUpdate = new UpdateRequest(data_list.get(viewHolder.getAdapterPosition()).getRef(), updatedValues);
                            restApi.update(taskUpdate);
                            data_list.remove(viewHolder.getAdapterPosition());
                            adapter.notifyDataSetChanged();
                        } catch (URISyntaxException | IOException e) {
                            e.printStackTrace();
                        }


                    }
                });
            }
        };
        ItemTouchHelper itemTouchHelper = new ItemTouchHelper(simpleItemTouchCallback);
        itemTouchHelper.attachToRecyclerView(recyclerView);

您应该只在主线程(UI线程)上调用
adapter.notifyDataSetChanged()

请参阅此

使用runOnUiThread()方法从非UI线程执行UI操作

private class ReceiverThread extends Thread {
@Override
public void run() { 
Activity_name.this.runOnUiThread(new Runnable() {

        @Override
        public void run() {
             mAdapter.notifyDataSetChanged();
        }
    });
}
您不能从其他线程接触UI的视图。对于您的问题,您可以使用AsyncTask、runOnUiThread或handler