我想檢查編輯文本中的 URL,如果它有效,則在回收站視圖中添加一個專案。為此,我啟動了一個執行緒來檢查 HTTP 連接。
thread = new Thread(new Runnable() {
@Override
public void run() {
String link = edt.getText().toString();
URL url = null;
try {
url = new URL(link);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
int code = connection.getResponseCode();
if(code == 200) {
Log.d(TAG, "reachable");
InsertItem(url,adapter);
} else {
Log.d(TAG, "in catch: not reachable");
}
} catch (IOException e) {
e.printStackTrace();
}
}
});
thread.start();
問題是我在嘗試添加專案時遇到的錯誤
private void InsertItem(URL url, MyAdapter adapter) {
thread.currentThread().interrupt();
arrayList.add(0,new file(url.toString()));
adapter.notifyItemChanged(0);
};
錯誤是:
android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
uj5u.com熱心網友回復:
android.view.ViewRootImpl$CalledFromWrongThreadException:只有創建視圖層次結構的原始執行緒才能觸摸其視圖。
看起來在你的新執行緒中,你正在呼叫 InsertItem(url,adapter)(應該以小寫的“I”開頭),它試圖對 UI 元素執行一些作業。
由于錯誤狀態,您無法觸摸 UI 執行緒之外的視圖。您可以嘗試在您的執行緒中添加 runOnUiThread(() -> insertItems(url,adapter) 以將操作發布到 UI 執行緒。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/371846.html
標籤:安卓 多线程 android-recyclerview http连接
上一篇:從一個檔案中讀取同一行的執行緒
