android - ASynctask 的doInBackground() 中return 语句的作用是什么?

标签 android android-asynctask android-ui

如果我将 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;
}

最佳答案

目的是将作业的结果(在工作线程上执行)传递给 onPostExecute,以便在 UI 线程上处理结果。如果您想更新用户界面以响应成功的作业运行,则这是必需的。

关于android - ASynctask 的doInBackground() 中return 语句的作用是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9938985/

相关文章:

android - MediaScannerConnection 在上传新图片之前未完成

android - 像android中的卡片一样布局

android - 在 Facebook/Twitter 注册之前检查现有用户解析 Android SDK

c# - Unity3d Android 插件静态 AsyncTask 问题

java - Android - 将数据从 AsyncTask 传递到 Activity

android - 如何以编程方式更改 ToggleButton 状态?

android - 在 Android 3.0+ 中,如何让具有自定义布局的操作按钮的样式像标准操作按钮一样

android - 使用 SL4A (Python) 和蓝牙

java - ImageButtons 排列不正确

android - 盗版,盗版,盗版。我能做些什么?