分配AsyncTask返回的值

时间:2015-06-12 10:41:29

标签: java android multithreading android-asynctask

public class Login extends ActionBarActivity{
.
.
.
// I have this method to run If the login button is pressed.
public void login(View v){

// I am performing all verification and validation
// Just not showing it here
// To store the keys
String api_key_from_database;
String api_key_from_network;

//Gets the key from the database
api_key_from_database=db.getApiKey(database,email);
api_key_from_network=httpRequest.getHttpResponse(email,password);;// I am having problems with this assignment

//Compare the two keys to authenticate
if(api_key_from_database.equals(api_key_from_network)){
       //Start the main activity
       //This is just placeholder to start the actual activity.
       startActivity(new Intent(this,MainActivity.class));
       //End this login activity
       finish();
   }
else{
// Throw error
}
}
}

由于getHttpResponse()执行网络活动,我无法在Main Thread上运行。

在我为api_key_from_network方法返回的getHttpResponse分配值的行中,似乎无法同时使用ThreadAsyncTask分配

使用Thread时,由于变量api_key_from_network未声明为final,因此无法访问变量。

new Thread(){
  public void run(){
  }
}.start();

如果我将其声明为final,则无法修改该值。

现在使用AsyncTask,我不确定如何返回值。 在doPostExecution()中,我似乎无法分配值。

是否可以帮助我将方法返回的值分配给api_key_from_network

2 个答案:

答案 0 :(得分:1)

您的变量api_key_from_network对您的班级来说是全局的。所以使用AsyncTask进行网络操作并获取数据,并在Post Execution中将其分配给变量。

public class get_key extends AsyncTask<String, String, String> {

ProgressDialog dialog;

    @Override
    protected void onPreExecute (){
    //Show Dialog Here
        super.onPreExecute ();
    }


    @Override
    protected String doInBackground (String... params){

    // Do Network Calling
    return string;
    }

    @Override
    protected void onPostExecute (String result){

     if(dialog.isShowing()){
     dialog.dismiss();
     }
    // put condition to check data
    api_key_from_network=reuslt;
    }
 }

只需运行新的get_key().execute();,即可从网络获取密钥。

答案 1 :(得分:0)

检查一下,它正在使用接口。请你从这个例子中找出一些想法

test environment