更新片段后台线程中的文本视图(UI 线程)



我正在尝试使用 I 的值更新文本视图,因为它在后台线程中循环访问 for 循环。我已经查看了其他答案并尝试了几种方法,但它没有更新。任何关于我做错了什么的建议,不胜感激。

这是我的最新尝试:

        new Thread(){
            public void run(){
                // Start the detailed search of channels
                YoutubeChannelInfoConnector yc = new YoutubeChannelInfoConnector(getActivity());
                channelinfosearchResults = yc.search(chanelIdToSearchStringBuilder.toString());
                handler.post(new Runnable(){
                    public void run(){
                                // Add the new influencers to the database
                                for (int i = 0; i < youtubeCompleteArraylistOfChannelsSearchedInDetail.size(); i++){
                                    final int finalI = i;
                                    getActivity().runOnUiThread(new Runnable() {
                                        public void run() {
                                            String addedInt = String.valueOf(finalI);
                                            newRecordsAddedToDatabaseTextView.setText(addedInt);
                                        }
                                    });
                                    Log.d("Database","record added " + i);
                                }
                                Toast.makeText(getActivity(), "Database Updated", Toast.LENGTH_SHORT).show();
                                loadingview.setVisibility(View.GONE);


                            } else {
                                // continue in the detailed search of channels
                                searchYoutubeChannels(channelsToAdd);
                            }
                        } else {
                            Toast.makeText(getActivity(), "ERROR: THE SEARCH RETURNED NO RESULTS!", Toast.LENGTH_LONG).show();
                        }
                    }
                });
            }
        }.start();
    }

这可能没有绝对意义,因为我不得不剪掉这么多行,以便可以在stackoverflow上阅读。

基本上:

有新线程,在该线程中,我有一个可运行的处理程序,它正在运行以下 for 循环:

   // Add the new influencers to the database
                                for (int i = 0; i < youtubeCompleteArraylistOfChannelsSearchedInDetail.size(); i++){
                                    final int finalI = i;
                                    getActivity().runOnUiThread(new Runnable() {
                                        public void run() {
                                            String addedInt = String.valueOf(finalI);
                                            newRecordsAddedToDatabaseTextView.setText(addedInt);
                                        }
                                    });
                                    Log.d("Database","record added " + i);
                                }

我正在使用getActivity.runonUI因为它在片段中运行。那能不能可能是代码正在运行但仍未更新文本视图的原因?

更新:

我还使用新的处理程序尝试了以下代码,但也没有工作:

final int finalI = i;
                                    new Handler().post(new Runnable() {
                                        @Override
                                        public void run() {
                                            String addedInt = String.valueOf(finalI);
                                            newRecordsAddedToDatabaseTextView.setText(addedInt);
                                        }
                                    });

提前感谢您的帮助

这样做

 Handler handler=new Handler();
    handler.postDelayed(new Runnable() {
        @Override
        public void run() {
            // Add the new influencers to the database
            for (int i = 0; i < 100; i++){
                String addedInt = String.valueOf(i);
                Log.e("data",addedInt);
                view.setText(addedInt);
                Toast.makeText(MainActivity.this, "Database Updated", Toast.LENGTH_SHORT).show();
        }
        }
    },2000);

做这样的事情;

Handler handler=new Handler(Looper.getMainLooper());
        handler.postDelayed(new Runnable() {
            @Override
            public void run() {
                // Add the new influencers to the database
                for (int i = 0; i < 100; i++){
                    String addedInt = String.valueOf(i);
                    Log.e("data",addedInt);
                    view.setText(addedInt);
                    Toast.makeText(MainActivity.this, "Database Updated", Toast.LENGTH_SHORT).show();
            }
            }
        },2000);

使用这个:

public class Data extends AsyncTask<Void,Void,String> {
    @Override
    protected String doInBackground(Void... params) {
        Handler handler=new Handler(Looper.getMainLooper());
        handler.postDelayed(new Runnable() {
            @Override
            public void run() {
                // Add the new influencers to the database
                for (int i = 0; i < 100; i++){
                    String addedInt = String.valueOf(i);
                    Log.e("data",addedInt);
                    view.setText(addedInt);
                    Toast.makeText(MainActivity.this, "Database Updated", Toast.LENGTH_SHORT).show();
                }
            }
        },2000);
        return txt;
    }
}

最新更新