Android - 从AsyncTask doInBackground函数返回Integer值

时间:2017-09-21 09:28:47

标签: java android android-asynctask sharedpreferences

解决 谢谢你们,我通过从AsyncTask函数中删除PreExecute功能来解决我的问题。谢谢大家。

我想从AsycnTask函数返回Integer值,即userId到其他活动,我试过谷歌搜索我的问题,看了很多关于stackoverflow的讨论,但没有解决我的问题...希望你们能指导我怎么做此

最终代码:(解决问题后)

private class ValidateUserAccount extends AsyncTask<Void, Integer, Void> {
    String response = "";

    @Override
    protected Void doInBackground(Void... voids) {
        HashMap<String, String> loginDataParams = new HashMap<>();
        loginDataParams.put("email", strEmail);
        loginDataParams.put("password", strPassword);
        JSONObject jsonData = new JSONObject(loginDataParams);
        String path = "myUrl";
        response = Login.ServerData(path, jsonData);
        return null;
    }

    @Override
    protected void onPostExecute(Void aVoid) {
        super.onPostExecute(aVoid);
        uProgressBar.setVisibility(View.GONE);
        int code = Login.passResCode();
        userId = Login.passUserId();
        if (code == 200) {
            Toast.makeText(getApplicationContext(), "Successfully Login: " + userId, Toast.LENGTH_SHORT).show();
            userIdSharedPreferences = PreferenceManager.getDefaultSharedPreferences(LoginActivity.this);
            Intent loginSuccess = new Intent(getApplicationContext(), MainActivity.class);
            userIdEditor = userIdSharedPreferences.edit();
            userIdEditor.putInt("userId", userId);
            userIdEditor.apply();
            startActivity(loginSuccess);
            finish();
        } else {
            final AlertDialog.Builder alertBox = new AlertDialog.Builder(LoginActivity.this);
            String errorMessage = "";
            if (code == 401)
                errorMessage = "Email and Password are not valid.";
            else if (code == 0)
                errorMessage = "Please check your internet connection.";

            alertBox.setMessage(errorMessage).setCancelable(false)
                    .setNegativeButton("OK", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialogInterface, int i) {
                            dialogInterface.cancel();
                        }
                    });
            AlertDialog alert = alertBox.create();
            alert.setTitle("Oops, Something went wrong!");
            alert.show();
        }
    }
}

3 个答案:

答案 0 :(得分:1)

我认为你可以把它作为额外的意图...我真的不明白你为什么使用userIdEditor以及它是什么......但我认为这样的事情会起作用

Intent loginSuccess = new Intent(getApplicationContext(), MainActivity.class); loginSuccess.putExtra("userId",userId); startActivity(loginSuccess); 你可以通过

在开放的活动中获得id

int userId = getIntent().getExtra().getInt("userId");

答案 1 :(得分:0)

您可以使用Intent#putExtra在活动中传递额外内容。[阅读](https://developer.android.com/reference/android/content/Intent.html#putExtra(java.lang.String,android.os.Bundle))更多信息。

答案 2 :(得分:0)

写入共享偏好时请使用userIdEditor.commit();提交函数将返回布尔值,因此您可以检查共享偏好值是已提交还是已成功应用