2014-10-19 31 views
0

我有一个问题,我需要令牌将其传递给我的SessionManagement类,以将其与保存的令牌进行比较,但在我的onCreate中它始终为空,我需要一种解决方法使我的标记不为空onrowcreate 请帮忙。 这里是我的代码从AsyncTask中创建一个字符串不为null onCreate

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(); 
     } 
    } 


} 
+0

尝试传递'this'而不是'getApplicationContext()'并发布堆栈跟踪。 – 2014-10-19 16:52:27

+0

在共享prefs中保存的令牌都可以,但是使用来自异步任务的令牌, – Alex 2014-10-19 16:59:34

+0

您正在传递(执行AsyncTask)点击令牌。所以令牌在此之前应该是空的。除非您单击按钮,否则您可以使用临时值初始化令牌。 – VipulKumar 2014-10-19 17:00:48

回答

0

试试这个:

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

希望它能帮助。

+0

它不是哈希映射,它是我在AsyncTask中获取的令牌在背景 – Alex 2014-10-19 16:58:57

+0

你的意思是在这一行* token = c.getString(TAG_TOKEN) ; * ??? – 2014-10-19 17:00:39

+0

谢谢,但我需要比较令牌,如果它们是相同的,当用户再次打开应用 – Alex 2014-10-19 17:02:12