如果 URL 有效,则添加到回收站视图
add to recycler view if URL is valid
我想检查编辑文本中的 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.
android.view.ViewRootImpl$CalledFromWrongThreadException:只有创建视图层次结构的原始线程才能触及它的视图。
看起来在你的新线程中,你正在调用 InsertItem(url,adapter)(应该以小写 'I' 开头),它正在尝试对 UI 元素.
如错误所述,您无法触及 UI 线程之外的视图。您可以尝试在线程中添加 runOnUiThread(() -> insertItems(url,adapter) 到 post 到 UI 线程的操作。
我想检查编辑文本中的 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.
android.view.ViewRootImpl$CalledFromWrongThreadException:只有创建视图层次结构的原始线程才能触及它的视图。
看起来在你的新线程中,你正在调用 InsertItem(url,adapter)(应该以小写 'I' 开头),它正在尝试对 UI 元素.
如错误所述,您无法触及 UI 线程之外的视图。您可以尝试在线程中添加 runOnUiThread(() -> insertItems(url,adapter) 到 post 到 UI 线程的操作。