我正在 Android 中执行 AsyncTask
Web 请求。 Web 请求代码可以工作并返回变量,因为我可以将它们输出到日志中,无需担心并查看我需要查看的所有内容。
我一定是误解了AsyncTask
,我以为在onPostExecute
方法中我们可以访问GUI,但是当我尝试运行时我不断收到空指针>findViewById。
TextView textView;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView = (TextView) findViewById(R.id.outputView);
}
protected void onPostExecute(String result) {
Log.w("CleverMining", "Posting results..." + result);
textView.setText(result);
}
此处布局 XML - activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<Button android:layout_height="wrap_content" android:layout_width="match_parent" android:id="@+id/updateStats" android:text="@string/update_stats"></Button>
<TextView android:id="@+id/outputView" android:layout_width="match_parent" android:layout_height="match_parent" android:text="@string/empty"></TextView>
</LinearLayout>
因此日志可以看到正确的输出 ezpz,但是当我查找 TextView 时,我得到空指针,这意味着可能超出范围或其他内容。请帮忙?
如何通过 AsyncTask 的 onPostExecute 方法访问主 Activity 中的 TextView ?
更新:LOGCAT 输出位于 http://pastebin.com/ST7r9eAW
更新2: 创建一个类级别的 TextView ,然后在 onCreate() 中实例化它会给我同样的空指针错误。
最佳答案
任何初始化都应该在 Activity 的 onCreate() 方法内完成。所以请移步,
setContentView(R.layout.activity_main);
TextView textView = (TextView) findViewById(R.id.outputView);
到你的 onCreate 方法。并且只调用
textView.setText(result);
在 postExecute() 方法中。还要确保您的 textView 是类级别变量,以便在 onCreate() 之外访问它。
关于java - Android AsyncTask onPostExecute 访问 GUI 元素给出空指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21951966/