Android:CalledFromWrongThreadException 在 onProgressUpdate 函数中的 AsyncTask 中
Android:CalledFromWrongThreadException in AsyncTask in the onProgressUpdate function
这是一个非常简单的程序,它会在单击按钮时调用异步任务,从而更改文本视图。
但是在单击按钮时会出现 CalledFromWrongException。
public class FragmentC extends Fragment {
public FragmentC() {
}
public View contentViewC;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
contentViewC = inflater.inflate(R.layout.fragment_fragment_b, container, false);
Button button = (Button) contentViewC.findViewById(R.id.button1);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (MainActivity.filepath != "Nothing") {
Frequency getFreq=new Frequency();
getFreq.execute();
}
}
});
return contentViewC;
}
private class Frequency extends AsyncTask<Void, Float, Void> {
@Override
protected Void doInBackground(Void... params) {
onProgressUpdate();
return null;
}
@Override
protected void onProgressUpdate(Float... values) {
textToChange.setText("Demo");
}
}
不要直接调用onProgressUpdate()
您只需从 doInBackground()
调用 publishProgress()
,然后 AsynchTask
在 UI 线程中调用 onProgressUpdate()
。
In Android only in main thread we update the UI
要了解更多信息,请查看此 onProgressUpdate() documnet
这是一个非常简单的程序,它会在单击按钮时调用异步任务,从而更改文本视图。
但是在单击按钮时会出现 CalledFromWrongException。
public class FragmentC extends Fragment {
public FragmentC() {
}
public View contentViewC;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
contentViewC = inflater.inflate(R.layout.fragment_fragment_b, container, false);
Button button = (Button) contentViewC.findViewById(R.id.button1);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (MainActivity.filepath != "Nothing") {
Frequency getFreq=new Frequency();
getFreq.execute();
}
}
});
return contentViewC;
}
private class Frequency extends AsyncTask<Void, Float, Void> {
@Override
protected Void doInBackground(Void... params) {
onProgressUpdate();
return null;
}
@Override
protected void onProgressUpdate(Float... values) {
textToChange.setText("Demo");
}
}
不要直接调用onProgressUpdate()
您只需从 doInBackground()
调用 publishProgress()
,然后 AsynchTask
在 UI 线程中调用 onProgressUpdate()
。
In Android only in main thread we update the UI
要了解更多信息,请查看此 onProgressUpdate() documnet