2013-04-12 49 views
3

你好,我想問幾個問題 我想使應用程序與Web服務,我提出使多個HTTP POST在android系統

我的應用程序有2個UNIQUEID稱爲APP_ID和令牌連接,APP_ID產生只有一次,應用程序第一次啓動和令牌通過網絡服務產生的

每一個要求,我必須檢查每當令牌已經過期或沒有,如果令牌已經過期,它會調用單獨的Web服務並生成新的令牌

問題該應用程序必須訪問2個不同的Web服務:請求新的令牌和再弄所需的數據

我使用的AsyncTask,但是從Web服務的響應的請求令牌總是相同的每一個要求,我爲什麼

protected Boolean doInBackground(Void... params) { 
     int status = 0; 
     int token_expired=0; 
     String token_val = token.getToken(getBaseContext()); 
     for(int i=0;i<5 && status==0;i++) { 
      try { 
       Thread.sleep(1000); 
       //function to check if token already expired or not and request new token using http post 
       token_expired = token.checkToken(getBaseContext()); 
       System.out.println("token expired: " +token_expired); 
       if (token_expired==1 || token_expired==2) { 
        //function to call another web service and get a data from it 
        status = rclient.Execute("POST"); 
       } 
      } catch (Exception e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
     } 
     if (status==0) { 
      return false; 
     }else{ 
      return true; 
     } 
    } 

由於之前不知道!

+0

你的代碼過期令牌功能在哪裏? – Kameswari

+0

我發佈我的下面的其他功能 –

回答

0

噢,這是檢查令牌從類標記處理程序的功能

public Integer checkToken(Context context) { 
     int status = 0; //0 = failed to request token , 1 = successfully request new token, 2 = token has not expired yet 
     String token_id = getToken(context); 
     System.out.println("token_id: " +token_id); 
     //if (token_id!=null) { 
      Long time = getTime(context); 
      Long curr_time = System.currentTimeMillis()/1000; 
      System.out.println("time before: " +time); 
      System.out.println("time current: " +curr_time); 
      Long interval = curr_time - time; 
      System.out.println("interval: " +interval); 
      if (interval>10) { 
       status = TokenGenerator(context); 
      }else { 
       status = 2; 
      }  
     //} 
     return status;  
    } 

} 

,這是從同一類

public synchronized Integer TokenGenerator(Context context) { 
    int status = 0; 
    SharedPreferences sharedPrefs = context.getSharedPreferences(TOKEN_STORAGE, Context.MODE_PRIVATE); 
    uniqueID = sharedPrefs.getString(PREF_UNIQUE_ID, null); 
    try { 
     rclient.AddJSON("app_id", uniqueID); 
     rclient.CompileJSON(); 
    } catch (JSONException e1) { 
     e1.printStackTrace(); 
    } 
    try { 
     status = rclient.Execute("POST"); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    if (status==1) { 
     String response = rclient.getResponse(); 
     String token = null; 
     System.out.println("uuid_response: " +response); 
     try { 
      JSONObject json = new JSONObject(response); 
      token = json.getString("result"); 
     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 
     Long tsLong = System.currentTimeMillis()/1000; 
     String ts = tsLong.toString(); 
     System.out.println("time: " +ts); 
     Editor editor = sharedPrefs.edit(); 
     editor.putString(TIMESTAMP, ts); 
     editor.putString(TOKEN_ID, token); 
     editor.commit(); 
     } 
return status; 

} 

所以基本上剩下的客戶端類請求新令牌的功能稱爲兩次,首先在類令牌處理器請求一個新的令牌,第二從活動本身

0

根據您發佈的代碼,我認爲rclient.Execute( 「POST」)用於獲取數據。但是,下面的代碼

if (token_expired==1 || token_expired==2) { 
    //function to call another web service and get a data from it 
    status = rclient.Execute("POST"); 
} 

說,如果令牌還活着,你正試圖再次獲得新令牌。 我認爲行狀態= rclient.Execute(「POST」);應該用代碼替換以從服務器獲取數據。

0

問題解決後,我把功能的休息客戶端類的構造函數