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
分配值的行中,似乎无法同时使用Thread
和AsyncTask
分配
使用Thread
时,由于变量api_key_from_network
未声明为final
,因此无法访问变量。
new Thread(){
public void run(){
}
}.start();
如果我将其声明为final
,则无法修改该值。
现在使用AsyncTask
,我不确定如何返回值。
在doPostExecution()
中,我似乎无法分配值。
是否可以帮助我将方法返回的值分配给api_key_from_network
答案 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