2014-10-19 38 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