如果我将return语句设置为0或1,我的登录系统的这个方面工作正常,但如果我使用null则失败。这全部改编自http://256design.com/blog/android-login-asynctask/,其中此特定返回看起来如下所示。
public LoginTask(Polling activity, ProgressDialog progressDialog)
{
this.activity = activity;
this.progressDialog = progressDialog;
}
protected Integer doInBackground(String... arg0) {
EditText userName = (EditText)activity.findViewById(R.id.emailEditText);
EditText passwordEdit = (EditText)activity.findViewById(R.id.passEditText);
String email = userName.getText().toString();
String password = passwordEdit.getText().toString();
UserFunctions userFunction = new UserFunctions();
JSONObject json = userFunction.loginUser(email, password);
progressDialog.dismiss();
// check for login response
//Log.v("test", Integer.toString(jsonParser.getResponseCode()));
try {
if (json.getString(KEY_SUCCESS) != null) {
//loginErrorMsg.setText("");
//loginFragment.loginErrorMsg.setText("Success");
String res = json.getString(KEY_SUCCESS);
if(Integer.parseInt(res) == 1){
//user successfully logged in
// Store user details in SQLite Database
DatabaseHandler db = new DatabaseHandler(activity.getApplicationContext());
JSONObject json_user = json.getJSONObject("user");
//Log.v("name", json_user.getString(KEY_NAME));
// Clear all previous data in database
userFunction.logoutUser(activity.getApplicationContext());
db.addUser(json_user.getString(KEY_NAME), json_user.getString(KEY_EMAIL),
json.getString(KEY_UID), json_user.getString(KEY_CREATED_AT));
// Close Login Screen
//finish();
//loginErrorMsg = (TextView)activity.findViewById(R.id.loginErrorMsg);
//loginErrorMsg.setText("logged in");
//passwordEdit.setText("");
}else{
// Error in login
//progressDialog.setMessage("Incorrect username or password");
//loginErrorMsg.setText("Incorrect username/password");
}
}
} catch (NullPointerException e) {
e.printStackTrace();
}
catch (JSONException e) {
e.printStackTrace();
}
return 1;
}
我使用的教程,看一下responseCode:
protected Integer doInBackground(String... arg0)
{
String result = "";
int responseCode = 0;
try
{
HttpClient client = new DefaultHttpClient();
HttpPost httppost = new HttpPost("http://www.256design.com/projectTransparency/project/headerLogin.php");
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
nameValuePairs.add(new BasicNameValuePair("emailAddress", arg0[0]));
nameValuePairs.add(new BasicNameValuePair("password", arg0[1]));
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
int executeCount = 0;
HttpResponse response;
do
{
progressDialog.setMessage("Logging in.. ("+(executeCount+1)+"/5)");
// Execute HTTP Post Request
executeCount++;
response = client.execute(httppost);
responseCode = response.getStatusLine().getStatusCode();
// If you want to see the response code, you can Log it
// out here by calling:
// Log.d("256 Design", "statusCode: " + responseCode)
} while (executeCount < 5 && responseCode == 408);
BufferedReader rd = new BufferedReader(new InputStreamReader(
response.getEntity().getContent()));
String line;
while ((line = rd.readLine()) != null)
{
result = line.trim();
}
id = Integer.parseInt(result);
}
catch (Exception e) {
responseCode = 408;
e.printStackTrace();
}
return responseCode;
}
答案 0 :(得分:2)
DoInBackground向postExecute方法返回值,并且传递null不验证条件:
if(headerCode == 202)
activity.login(id);
答案 1 :(得分:2)
目的是将作业的结果(在工作线程上执行)传递给onPostExecute
,以便在UI线程上处理结果。如果要更新用户界面以响应成功的作业运行,则需要这样做。
答案 2 :(得分:1)
是您发送给postExecute
的价值:
http://developer.android.com/reference/android/os/AsyncTask.html#onPostExecute(Result)
protected void onPostExecute(结果结果)
之后在UI线程上运行 doInBackground(参数...)。
指定的结果是返回的值 通过doInBackground(Params ...)。
如果任务不会调用此方法 被取消了。
参数: result 由doInBackground(Params ...)计算的操作结果。
答案 3 :(得分:1)
protected class InitTask extends AsyncTask<Context, Integer, Integer>
在上面的行中,我们定义了子类以及将传递给回调的三个参数。回调看起来像这样:
<强> doInBackground()强>
@Override
protected Integer doInBackground( Context... params ) {
return super.doInBackground( params )
}
此方法中处理的任何内容都在sperate线程中处理。 请注意,返回值的数据类型是Integer,对应于类定义中的第三个类型参数。当此线程完成时,此方法返回的值将传递给onPostExecute()方法。
如果您传递 null作为回报,那么它会失败方法onPostExecuted()
上的条件