setAccountAuthenticatorResult可以从Activity中调用,它可以扩展AccountAuthenticatorActivity.我的活动扩展了,但是启动了ASyncTask,因此setAccountAuthenticatorResult应该从ASyncTask调用(或者,ASyncTask的结果应该传递回主线程).
怎么做?
下面的代码有什么问题?
AsyncTask<Uri, Void, Bundle> task = new RetrieveAccessTokenTask(this, consumer, provider, prefs).execute(uri);
public class RetrieveAccessTokenTask extends AsyncTask<Uri, Void, Bundle> {
private Context context;
public RetrieveAccessTokenTask(Context context, OAuthConsumer consumer,
OAuthProvider provider, SharedPreferences prefs) {
this.context = context;
}
@Override
protected void onPostExecute(Bundle result) {
context.setAccountAuthenticatorResult(); // doesn't work
}
Run Code Online (Sandbox Code Playgroud) 我正在使用AsyncTask类从php文件下载数据.下载后,我想把这些数据放到不同的TextViews中,但我不能使用findViewById方法.
问题是,我是通过单独的类来完成的,而这一切都在一个片段中.
这是我的代码:
public class RecuperarComentarisFoto extends AsyncTask<String, String, String>{
private Context mContext;
[...]
public RecuperarComentarisFoto(Context context){
this.mContext=context;
}
@Override
protected void onPreExecute() {
[...]
}
@Override
protected String doInBackground(String... arg0) {
params.add(new BasicNameValuePair("pid", "1"));
JSONObject json = jsonParser.makeHttpRequest(url_get_comentaris, "GET", params);
JSONArray productObj;
//HERE I RETRIEVE DATA FROM JSON. ITS WORKING OK.
return null;
}
Run Code Online (Sandbox Code Playgroud)
我遇到问题的地方:
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
this.pDialog.dismiss();
TextView comentariEditText = (TextView) findViewById(R.id.commentsMostrar);
}
Run Code Online (Sandbox Code Playgroud)
我试过这个:
TextView comentariEditText = (TextView) mContext.findViewById(R.id.commentsMostrar);
Run Code Online (Sandbox Code Playgroud)
但是也不行.
请注意,我从片段中调用此AsyncTask.如您所见,我必须将getActivity()检索的上下文传递给AsyncTask:
public class …Run Code Online (Sandbox Code Playgroud)