【发布时间】:2017-02-01 15:41:54
【问题描述】:
我想更改 textView 的文本以匹配网站的标题。
为此,我连接到 https://www.google.com 并获取其 html 源代码。然后我从中获取标题标签。 (使用JSoup)
问题是现在我不知道如何更改 textView。由于网络是在后台线程中进行的,因此我无权访问它。我应该如何以及在哪里做?
另外,感谢 Log.w,我知道它已成功连接。
这是我所拥有的:
主活动
public class MainActivity extends AppCompatActivity {
Button btnConnect;
final String URL = "https://www.google.com";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnConnect = (Button) findViewById(R.id.btnConnect);
btnConnect.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// launch networking task
new EstablishConnectionTask().execute(URL);
}
});
}
}
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.awakened.tirafesi.awakenedprototype.MainActivity">
<Button
android:text="Establish Connection"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_centerHorizontal="true"
android:id="@+id/btnConnect" />
<TextView
android:text="Placeholder"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="87dp"
android:id="@+id/txtTitle" />
</RelativeLayout>
建立连接任务
public class EstablishConnectionTask extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... urls) {
String title;
try {
Document doc = Jsoup.connect(urls[0]).get();
title = doc.title();
} catch (IOException e) {
e.printStackTrace();
title = "NO";
}
return title;
}
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
Log.w("Title", s);
}
}
【问题讨论】:
-
编写一个监听器并将其发送到您的 EstablishConnectionTask 然后在 onPostExecute 中调用您的接口方法。在您的 MainActivity 首先实现该侦听器并在它的覆盖方法中设置 textView 的标题。
-
建立在@eminuluyol 所说的基础上,这个问题给出了一个代码示例:stackoverflow.com/questions/9447646/…
-
我不明白... MainActivity 上的接口方法的覆盖将如何影响 onPostExecute 中的接口调用?你介意添加它的代码吗?
-
@Tirafesi 查看我发布的答案
标签: android android-asynctask jsoup