我的Android应用程序使用单个Activity创建一个未在清单中定义的SurfaceView,并且我的所有UI元素都是自定义的。现在我正在尝试进行异步HTTP调用,我无法访问任何应用程序的类。我在异步http调用中看到的每个例子都是这样的:
class RequestTask extends AsyncTask<String, String, String>{
@Override
protected String doInBackground(String... uri) {
// Code to make http call
return responseString;
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
TextView txt = (TextView) findViewById(R.id.output);
// format the result and write it to the TextView object
}
}
在该示例中,由于RequestTask无法访问任何应用程序对象,因此您可以使用findViewByID获取它们。我不明白的是,如果我的清单中没有定义任何视图,我如何访问我的应用程序的对象?我的清单中唯一的东西是活动:
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.blah.blah.MyActivity"
android:label="@string/app_name" >
android:configChanges="keyboardHidden|orientation" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
我这样做是为了简单/懒惰,到目前为止工作得很好。有没有办法访问我的应用程序(活动,或其中定义的视图,或我实例化的其他类),而不使用findViewById,或者我是否需要在清单中定义我的SurfaceView?
答案 0 :(得分:0)
向任务添加构造函数。传递它需要在构造函数中访问的视图。将其保存到任务的类变量中。
如果您需要执行大量操作,请传入活动,并在活动上调用findViewById。只需记住在onPostExec结尾处取消活动,以避免泄露活动的风险。