Android 在onCreate中使AsyncTask中的字符串不为null

Android 在onCreate中使AsyncTask中的字符串不为null,android,json,android-asynctask,oncreate,Android,Json,Android Asynctask,Oncreate,我有一个问题,我需要令牌将其传输到我的SessionManagement类,以将其与保存的令牌进行比较,但在我的onCreate中,它始终为null,我需要一个解决方法使我的令牌在onCreate中不为null 请帮忙。 这是我的密码 private static final String LOGIN_URL = "http://baymd.myterranet.com/api/auth"; private static final String TAG_SUCCESS = "code"

我有一个问题,我需要令牌将其传输到我的SessionManagement类,以将其与保存的令牌进行比较,但在我的onCreate中,它始终为null,我需要一个解决方法使我的令牌在onCreate中不为null 请帮忙。 这是我的密码

private static final String LOGIN_URL = "http://baymd.myterranet.com/api/auth";
    private static final String TAG_SUCCESS = "code";
    private static final String TAG_MESSAGE = "message";
    private static final String TAG_DATA = "data";
    private static final String TAG_TOKEN = "access_token";
    JSONParser jsonParser = new JSONParser();
    private EditText user, pass;
    private Button mSubmit;
    private ProgressDialog pDialog;
    private String token, none,SavedToken;
    SesionManagement session;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);
        session=new SesionManagement(getApplicationContext());
        HashMap<String, String> tokens = session.getUserDetails();
        SavedToken = tokens.get(session.KEY_NAME);
        if(token==null) {//This line 
            Log.d("TOKEN ====== ", "NULLL");
        }
        session.checkLogin(token, SavedToken);
        user = (EditText) findViewById(R.id.inputEmail);
        pass = (EditText) findViewById(R.id.inputPass);
        mSubmit = (Button) findViewById(R.id.loginBtn);
        mSubmit.setOnClickListener(this);
    }
    @Override
    public void onClick(View v) {
        new AttemptLogin().execute();

    }

    class AttemptLogin extends AsyncTask<String, String, String> {
        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            pDialog = new ProgressDialog(Login.this);
            pDialog.setMessage("Attempting login...");
            pDialog.setIndeterminate(false);
            pDialog.setCancelable(true);
            pDialog.show();
        }

        @Override
        protected String doInBackground(String... args) {
            int success;
            String username = user.getText().toString();
            String password = pass.getText().toString();
            try {
                List<NameValuePair> params = new ArrayList<NameValuePair>();
                params.add(new BasicNameValuePair("email", username));
                params.add(new BasicNameValuePair("password", password));
                JSONObject json = jsonParser.makeHttpRequest(
                        LOGIN_URL, "POST", params, none);
                success = json.getInt(TAG_SUCCESS);
                if (success == 200) {
                    JSONObject c = json.getJSONObject(TAG_DATA);
                    token = c.getString(TAG_TOKEN);//The token wich is null in oncreate
                    Intent i = new Intent(Login.this, NavDraver.class);
                    i.putExtra("cjson", c.toString());
                    finish();
                    startActivity(i);
                    return json.getString(TAG_MESSAGE);
                } else {
                    Log.d("Login Failure!", json.getString(TAG_MESSAGE));
                    json.getString(TAG_MESSAGE);
                    return json.getString(TAG_MESSAGE);
                }
            } catch (JSONException e) {
                e.printStackTrace();
            }
            return null;
        }
        @Override
        protected void onPostExecute(String s) {
            session.createLoginSession(token);
            Log.d("SAVED TOKEN",SavedToken);
            pDialog.dismiss();
        }
    }


}
试试这个:

token = c.optString(TAG_TOKEN, yourDefaultValueHere);
if(token == null){
token = ""; // or whatever you want to init here
}

希望有帮助。

尝试传递此标记,而不是getApplicationContext,并发布堆栈跟踪。使用共享prefs中保存的标记,一切正常,但使用从异步任务中获得的标记,您在单击时传递执行异步任务的标记。因此,在此之前,令牌应该是空的。除非单击按钮,否则您可以使用临时值初始化令牌。是的,我知道,但我需要以某种方式将其放入oncreate中,解决方法可能不是hashmap,而是AsyncTask do InBackground中获得的令牌谢谢,但如果它们相同,我需要比较令牌,当用户再次打开应用程序时,如果您的问题是来自JSONObject的令牌,请尝试传递默认参数。请看编辑后的答案。先生,很抱歉,我没有正确解释,该令牌在同步任务中很好,它得到了它,我正在寻找一种方法,以某种方式将异步任务中的令牌放入我的onCreate中,使其不为空,但只有在单击视图时才能执行异步任务,对吗?对不起,我不明白你在问什么。