我正在尝试使用 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;
}
}