Android 如何执行方法onPostExecute启动新活动
我有一个任务执行doInBackground方法并返回一个布尔值。我想要的是启动一个新的意图,但startActivity方法不可用。我该怎么做 我的任务:Android 如何执行方法onPostExecute启动新活动,android,android-asynctask,Android,Android Asynctask,我有一个任务执行doInBackground方法并返回一个布尔值。我想要的是启动一个新的意图,但startActivity方法不可用。我该怎么做 我的任务: public class LoginTask extends AsyncTask<String, Integer, Boolean> { @Override protected Boolean doInBackground(String... params) {
public class LoginTask extends AsyncTask<String, Integer, Boolean> {
@Override
protected Boolean doInBackground(String... params) {
boolean sucess;
//do some stuff
return sucess;
}
@Override
protected void onPostExecute(Boolean result) {
if (result) {
//startActivity(new Intent(this, MainViewActivity.class));
//it doesn't find startActivity
}
}
}
公共类登录任务扩展异步任务{
@凌驾
受保护的布尔doInBackground(字符串…参数){
布尔成功;
//做点什么
回归成功;
}
@凌驾
受保护的void onPostExecute(布尔结果){
如果(结果){
//startActivity(新意图(此,MainViewActivity.class));
//它找不到星体触觉
}
}
}
在构造函数中传递启动异步TAK的活动
public class LoginTask {
private Context mCtx;
public LoginTask(Context ctx){
mCtx = ctx;
}
....
@Override
protected void onPostExecute(Boolean result) {
if (result) {
mCtx.startActivity(new Intent(mCtx, MainViewActivity.class));
}
}
}
在构造函数中传递启动AsyncTak的活动
public class LoginTask {
private Context mCtx;
public LoginTask(Context ctx){
mCtx = ctx;
}
....
@Override
protected void onPostExecute(Boolean result) {
if (result) {
mCtx.startActivity(new Intent(mCtx, MainViewActivity.class));
}
}
}
您确定startActivity不可用吗?我刚刚测试过,它对我来说很好 我认为您应该替换行中的this,因为this不是指活动,而是指任务
startActivity(new Intent(getApplicationContext(), MainViewActivity.class));
那应该行。你确定startActivity不可用吗?我刚刚测试过,它对我来说很好 我认为您应该替换行中的this,因为this不是指活动,而是指任务
startActivity(new Intent(getApplicationContext(), MainViewActivity.class));
这应该是可行的。
这个onPostExecute()中的
引用了AsyncTask类实例。
使用YourActivityName。改为使用此:
startActivity(new Intent(ParentActivity.this, MainViewActivity.class));
onPostExecute()中的此
引用AsyncTask类实例。
使用YourActivityName。改为使用此:
startActivity(new Intent(ParentActivity.this, MainViewActivity.class));
您需要在创建任务时引用产生该任务的活动或上下文
公共类登录任务扩展异步任务{
活动能力;
公共登录任务(活动){
this.mActivity=mActivity;
}
@凌驾
受保护的布尔doInBackground(字符串…参数){
布尔成功;
//做点什么
回归成功;
}
@凌驾
受保护的void onPostExecute(布尔结果){
如果(结果){
startActivity(新意图(mContext,MainViewActivity.class));
}
}
}
您需要创建任务,并引用产生任务的活动或上下文
公共类登录任务扩展异步任务{
活动能力;
公共登录任务(活动){
this.mActivity=mActivity;
}
@凌驾
受保护的布尔doInBackground(字符串…参数){
布尔成功;
//做点什么
回归成功;
}
@凌驾
受保护的void onPostExecute(布尔结果){
如果(结果){
startActivity(新意图(mContext,MainViewActivity.class));
}
}
}
关于先前答复的备注:
请记住不要这样做。使用WeakReference
类:
public static class LoginTask extends AsyncTask<String, Integer, Boolean> {
WeakReference<Activity> mActivityReference;
public LoginTask(Activity activity){
this.mActivityReference = new WeakReference<Activity>(activity);
}
@Override
protected Boolean doInBackground(String... params) {
boolean sucess;
//do some stuff
return sucess;
}
@Override
protected void onPostExecute(Boolean result) {
if (result && mActivityReference.get() != null) {
Activity activity = mActivityReference.get();
activity.startActivity(new Intent(activity, MainViewActivity.class));
}
}
}
公共静态类LoginTask扩展异步任务{
WeakReference mActivityReference;
公共登录任务(活动){
this.mActivityReference=新的WeakReference(活动);
}
@凌驾
受保护的布尔doInBackground(字符串…参数){
布尔成功;
//做点什么
回归成功;
}
@凌驾
受保护的void onPostExecute(布尔结果){
if(result&&mActivityReference.get()!=null){
Activity=mActivityReference.get();
activity.startActivity(新意图(activity,MainViewActivity.class));
}
}
}
关于先前答复的备注:
请记住不要这样做。使用WeakReference
类:
public static class LoginTask extends AsyncTask<String, Integer, Boolean> {
WeakReference<Activity> mActivityReference;
public LoginTask(Activity activity){
this.mActivityReference = new WeakReference<Activity>(activity);
}
@Override
protected Boolean doInBackground(String... params) {
boolean sucess;
//do some stuff
return sucess;
}
@Override
protected void onPostExecute(Boolean result) {
if (result && mActivityReference.get() != null) {
Activity activity = mActivityReference.get();
activity.startActivity(new Intent(activity, MainViewActivity.class));
}
}
}
公共静态类LoginTask扩展异步任务{
WeakReference mActivityReference;
公共登录任务(活动){
this.mActivityReference=新的WeakReference(活动);
}
@凌驾
受保护的布尔doInBackground(字符串…参数){
布尔成功;
//做点什么
回归成功;
}
@凌驾
受保护的void onPostExecute(布尔结果){
if(result&&mActivityReference.get()!=null){
Activity=mActivityReference.get();
activity.startActivity(新意图(activity,MainViewActivity.class));
}
}
}
startActivity是上下文的函数。如果他的AsyncTask不是活动的内部类,那么它就不能直接使用。但是@SimonSays的建议是可行的。startActivity是上下文的函数。如果他的AsyncTask不是活动的内部类,那么它就不能直接使用。但是@SimonSays的建议会奏效。