gpt4 book ai didi

android - 使用 AsyncTask 从错误的线程异常中调用

转载 作者:行者123 更新时间:2023-11-29 14:33:26 26 4
gpt4 key购买 nike

即使我将 CalledFromWrongThreadException 放入 AsyncTask 的 DoInBackground 方法中,我也会不断收到它!谁能告诉我为什么以及如何解决它?

/**
* Recognizes key words in responseTexts and runs the appropriate function
* @param responseText
*/
private void responseHandler(String responseText) {
if(responseText.startsWith("Notes", 0)) {
notes.add(responseText);
new DownloadFilesTask().execute("WriteInternal" , null, null);
}
}

这是我的 AsyncTask 类

private class DownloadFilesTask extends AsyncTask<String, Void, String> {
protected String doInBackground(String... command) {
if(command[0].equals("WriteInternal") {
//write to internal storage
FileOutputStream fOut = null;
OutputStreamWriter osw = null;
try{
fOut = openFileOutput("notes.txt", Context.MODE_PRIVATE);
osw = new OutputStreamWriter(fOut);
for (int i = 0; i < notes.size(); i++){
osw.write(notes.get(i) + "\n");
}
osw.close();
fOut.close();
} catch(Exception e) {
e.printStackTrace(System.err);
}

notesListView.setAdapter(arrayAdapter); //refreshes the listView

}
else {
sendCommand(command[0]);
return null;
}
}

protected void onProgressUpdate(Void... progress) {}
protected void onPostExecute(String result) {}
}

这是我得到的堆栈跟踪:

05-22 15:14:20.370: E/AndroidRuntime(11730): FATAL EXCEPTION: AsyncTask #2
05-22 15:14:20.370: E/AndroidRuntime(11730): java.lang.RuntimeException: An error occured while executing doInBackground()
05-22 15:14:20.370: E/AndroidRuntime(11730): at android.os.AsyncTask$3.done(AsyncTask.java:278)
05-22 15:14:20.370: E/AndroidRuntime(11730): at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
05-22 15:14:20.370: E/AndroidRuntime(11730): at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
05-22 15:14:20.370: E/AndroidRuntime(11730): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
05-22 15:14:20.370: E/AndroidRuntime(11730): at java.util.concurrent.FutureTask.run(FutureTask.java:137)
05-22 15:14:20.370: E/AndroidRuntime(11730): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:208)
05-22 15:14:20.370: E/AndroidRuntime(11730): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
05-22 15:14:20.370: E/AndroidRuntime(11730): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
05-22 15:14:20.370: E/AndroidRuntime(11730): at java.lang.Thread.run(Thread.java:856)
05-22 15:14:20.370: E/AndroidRuntime(11730): Caused by: android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
05-22 15:14:20.370: E/AndroidRuntime(11730): at android.view.ViewRootImpl.checkThread(ViewRootImpl.java:4039)
05-22 15:14:20.370: E/AndroidRuntime(11730): at android.view.ViewRootImpl.invalidateChild(ViewRootImpl.java:722)
05-22 15:14:20.370: E/AndroidRuntime(11730): at android.view.ViewRootImpl.invalidateChildInParent(ViewRootImpl.java:771)
05-22 15:14:20.370: E/AndroidRuntime(11730): at android.view.ViewGroup.invalidateChild(ViewGroup.java:4005)
05-22 15:14:20.370: E/AndroidRuntime(11730): at android.view.View.invalidate(View.java:8576)
05-22 15:14:20.370: E/AndroidRuntime(11730): at android.view.View.invalidate(View.java:8527)
05-22 15:14:20.370: E/AndroidRuntime(11730): at android.widget.AbsListView.resetList(AbsListView.java:1734)
05-22 15:14:20.370: E/AndroidRuntime(11730): at android.widget.ListView.resetList(ListView.java:502)
05-22 15:14:20.370: E/AndroidRuntime(11730): at android.widget.ListView.setAdapter(ListView.java:442)
05-22 15:14:20.370: E/AndroidRuntime(11730): at com.nelson.jarvisclientics.Notes$DownloadFilesTask.doInBackground(Notes.java:281)
05-22 15:14:20.370: E/AndroidRuntime(11730): at com.nelson.jarvisclientics.Notes$DownloadFilesTask.doInBackground(Notes.java:1)
05-22 15:14:20.370: E/AndroidRuntime(11730): at android.os.AsyncTask$2.call(AsyncTask.java:264)
05-22 15:14:20.370: E/AndroidRuntime(11730): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
05-22 15:14:20.370: E/AndroidRuntime(11730): ... 5 more

最佳答案

尝试使用 runOnUIThread(new Runnable{/*code goes here*/}())

包装您的文件访问代码

关于android - 使用 AsyncTask 从错误的线程异常中调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10708800/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com