2011-01-20 61 views
0

我在懷疑我的方法之一是正確的方式。這是一個URI的合成器,我用於我的http requests。它僅從最終的Strings獲取單獨靜態類中的數據,將它們合併在一起,並在必要時包含從服務器令牌接收的數據。它發生的所有URIs都與令牌和唯一一個身份驗證,沒有它。我做了什麼:如何避免方法中的許多if/else條件?

private URI urlComposer(String apiUri, String token) { 
     URI uri = null; 
     try { 

      if(apiUri.equals("POST_AUTH_URL")) { 
       uri = URIUtils.createURI(null, MyConfig.WEB_SERVER, -1, apiUri, null, null); 
       return uri; 
      } 

      String tmp = apiUri.toString(); 
      String[] array = tmp.split("<token>"); 
      tmp = array[0] + auth.getToken() + array[1]; 

      uri = URIUtils.createURI(null, MyConfig.WEB_SERVER, -1, tmp, null, null); 

      if (MyConfig.DEBUG) Log.d("Dev", "Constructed url " + uri); 
      return uri; 
     } catch (URISyntaxException e) { 
      if (MyConfig.DEBUG) Log.d("Dev", "urlComposer was unable to construct a URL"); 
      e.printStackTrace(); 
     } 
     return null; 
    } 

試圖在未來看,我不喜歡這個主意,以產生更多的if/else語句,如果我將有更多的特殊情況下,像這樣的POST_AUTH_URL。一方面我想要調用唯一的方法來構建一個URI,另一方面我不想要這些ifs。我該怎麼辦?

+0

你第二次調用URIUtis.createURI總是覆蓋uri,不是嗎? – 2011-01-20 20:37:38

回答

2

如果你總是設置的URI,只是不同的人,你可以使用地圖:

uriMap.put("POST_AUTH_URL", URIUtils.createURI(null, MyConfig.WEB_SERVER, -1, apiUri, null, null)); 

你可以訪問此地圖後:

uri = uriMap.get(apiUri); 
0

理論上你就可以創建一個方法枚舉URI_TYPE createURI(很難從提供的代碼片段中導出實際參數)。這樣你就可以簡單地在一個特定的枚舉值上調用這個方法,這個枚舉值會有自己的具體實現。

請參閱thisthis瞭解更多信息。希望能幫助到你。