2015-07-21 19 views
-3

我使用asynctask从数据库中获取用户信息,因为您无法在其前端任务中执行此操作...当任务完成时,我希望返回到我打电话给这个Asynctask有没有办法做到这一点?如何在Asynctask中回拨我的父级活动

我的目标是启动另一个活动时的AsyncTask完成

package com.example.eightmiles; 
import android.app.AlertDialog; 
import android.content.Context; 
import android.os.AsyncTask; 
import android.print.PrintAttributes; 
import android.widget.Toast; 
import java.io.BufferedReader; 
import java.io.BufferedWriter; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import java.io.OutputStream; 
import java.io.OutputStreamWriter; 
import java.net.HttpURLConnection; 
import java.net.MalformedURLException; 
import java.net.URL; 
import java.net.URLEncoder; 
import java.util.StringTokenizer; 

public class Backgroundtask extends AsyncTask<String, Void, String> { 
    AlertDialog alertDialog; 
    AlertDialog alertDialog2; 
    Context ctx; 
    Signin signin; 
    Userlocalstore userlocalstore; 
    String res_name , res_username , res_dob , res_email , res_id , res_pass; 
    Backgroundtask(Context ctx) 
    { 
    this.ctx =ctx; 
    } 

    @Override 
    protected void onPreExecute() { 
    alertDialog = new AlertDialog.Builder(ctx).create(); 
    alertDialog.setTitle("Login Information...."); 
    alertDialog2 = new AlertDialog.Builder(ctx).create(); 

    alertDialog2.setTitle("Apologies"); 
    } 

    @Override 
    protected String doInBackground(String... params) { 
    String reg_url = "http://8miles.freeiz.com/Register.php"; 
    String login_url = "http://8miles.freeiz.com/getuserinfo.php"; 
    String method = params[0]; 
    if (method.equals("Register")) { 
     String name = params[1]; 
     String user_name = params[2]; 
     String user_pass = params[3]; 
     String email = params[4]; 
     String dob = params[5]; 

回答

1

AsyncTaskOnPostExecute方法,通过Intent开始新的活动,并通过加载的数据一起吧。

@Override 
protected void onPostExecute(String data) { 
    Intent intent = new Intent(MainActivity.this, WhateverActivityToStart.class); 
    intent.putExtra("SOME_DATA", data); 
    MainActivity.this.startActivity(intent); 
} 

你需要熟悉starting an activitypassing data between activities

+0

它不是那么简单..即使我已经通过我的活动对象为asyctask custructor并保存它....这是不可能的......这说“构造函数意图(Backgroundtask,类)未定义” –

+0

将与第一个参数相同的活动引用传递给Intent构造函数。我会更新片段。 – Boots

+0

尝试:'Intent intent = new Intent(MyActivity.this,WhateverActivity.class);' – BladeCoder

0

这就是onPostExecute()可以。你可以check the docs并看到第四步。

基本上,您将无法返回到您称为AsyncTask的位置,因为这是异步过程按设计执行的操作。

相反,因为在AsyncTask完成时在UI线程中调用onPostExecute(),您可以使用它来启动一个活动,显示一个toast和其他东西。

+0

多数民众赞成的观点...我无法启动一个活动使用onPostExecute().. –

+0

关于“意图意图=新的意图(这,WhateverActivity.class);”它给了我一个错误:“他的构造函数Intent(Backgroundtask,类)未定义” 并在此行“startActivity(finallogin);”它给了我一个错误:“方法startActivity(意图)未定义的类型BackgroundTask” –

+0

你的问题没有任何表明你知道onPostExecute。此外,你可以发布该错误,然后我们可以真正解决出了什么问题。 – Acapulco

0

我更喜欢使用回调时试图做一些事情在的AsyncTask,然后回去在我的活动做的工作......虽然答案已经在这里接受的代码一个不错位:

public class Backgroundtask extends AsyncTask<String, Void, String> { 
    private final TaskCallback taskCallback; 
    private final Context ctx; 
    ... 
    ... 

    public interface TaskCallback{ 
     public void taskComplete(String data); 
    } 

    Backgroundtask(Context ctx, TaskCallback taskCallback){ 
     this.ctx = ctx; 
     this.taskCallback = callback 
    } 

    ... 
    ... 

    //truncating the rest of your code, adding just the extra bit needed 

    @Override 
    protected void onPostExecute(String data) { 
     super.onPostExecute(data); 
     taskCallback(data); 
    } 
} 

然后在你的活动,你应该有这样的:

public class MyActivity extends Activity implements TaskCallback{ 

    //again, truncating most of what would be here like onCreate, etc... 

    @Override 
    public void taskComplete(String data){ 
     //call more work here if needed 

     Intent intent = new Intent(MyActivity.this, WhateverActivityToStart.class); 
     intent.putExtra("SOME_DATA", data); 
     startActivity(intent); 

     finish(); //May or may not need this, don't want them coming back probably 
    } 

} 
相关问题