2016-07-30 108 views
-1

因此,我現在堅持驗證郵政編碼搜索我的天氣應用的主題。我也想驗證城市和州的搜索。例如,當人們搜索郵政編碼時,我只需要5位數的郵政編碼。對於這個城市,當他們搜索這個城市時,我不想要任何數字。 有人可以幫我嗎?如何驗證天氣應用的郵政編碼和城市/州

public class WeatherRequestTask extends AsyncTask<String, Integer, ResponseDto> { 
    private static final String WU_HOST = "http://api.wunderground.com"; 
    private static final String WU_API_KEY = "/api/36053e2befabcfe2"; 
    private static final String WU_DATA_FEATURE_CONDITION = "/conditions"; 
    private static final String WU_QUERY_TAG = "/q"; 
    private static final String WU_API_EXT = ".json"; 

    private String mZipCode; 
    private String mCity; 
    private String mState; 

    public WeatherRequestTask(String zipCode) { 
     if (TextUtils.isEmpty(zipCode)) { 
      throw new IllegalArgumentException("Zip Code is required"); 
     } 
     mZipCode = zipCode; 

    } 

    public WeatherRequestTask(String city, String state) { 
     mCity = city; 
     mState = state; 
     // TODO: validate city and state 
    } 

    @Override 
    protected ResponseDto doInBackground(String... strings) { 
     ResponseDto myResponseDto = new ResponseDto(); 
     HttpURLConnection urlConnection = null; 
     try { 

      URL url; 
      if (TextUtils.isEmpty(mZipCode)) { 
       // use city and state query 
       url = new URL(WU_HOST + WU_API_KEY + WU_DATA_FEATURE_CONDITION + WU_QUERY_TAG + "/" + mState + "/" + 
         mCity + WU_API_EXT); 
      } else { 
       // use zipCode query 
       url = new URL(WU_HOST + WU_API_KEY + WU_DATA_FEATURE_CONDITION + WU_QUERY_TAG + "/" + mZipCode + 
         WU_API_EXT); 
      } 

      urlConnection = (HttpURLConnection)url.openConnection(); 
      BufferedReader br = new BufferedReader((new InputStreamReader(urlConnection.getInputStream()))); 
      StringBuilder sb = new StringBuilder(); 

      String temp; 
      while ((temp = br.readLine()) != null) { 
       sb.append(temp); 
      } 

      JSONObject contentJson = new JSONObject(sb.toString()); 
      Response response = Response.deserialize(contentJson.getJSONObject("response")); 
      CurrentObservation currentObservation = CurrentObservation.deserialize(contentJson.getJSONObject 
        ("current_observation")); 
      myResponseDto.setCurrentObservation(currentObservation); 
      myResponseDto.setResponse(response); 
     } catch (Exception e) { 
      return null; 
     } finally { 
      if (urlConnection != null) { 
       urlConnection.disconnect(); 
      } 
     } 
     return myResponseDto; 
    } 
} 
+1

他們在搜索什麼,它是在edittext還是搜索小部件上? –

+0

這將是一個編輯文本 –

+0

請張貼一些您的代碼,因此很容易爲您解決 –

回答

0

對於此部分:

例如,我只想要5個位數的郵編,當人們搜索 的郵政編碼

你可以嘗試來檢查郵編碼長度:

if(zipCode.length==5){ 

    //zipcode is 5 characters 
    //proceed with the search 

}else{ 

    //zipcode is less or more than 5 
    //warn user or whatever 
} 

用於:

對於這個城市,當他們搜索城市時,我不想要任何數字。

if(mState.matches(".*\\d+.*"){ 

    //contains numbers 
    //so don't carry forward or warn user 

    }else{ 

    //Possibly what you want 

    } 
+1

只需檢查匹配'\\ d'以查找字符串內的任何數字 –

0

這個問題有多個觸角。 「驗證」是什麼意思?您可以購買數據庫,將郵政編碼映射到州/城市對;反問題有點複雜。美國郵政出版巨大的書籍,提供這些信息。

至於沒有數字的城市,我從來沒有聽說過一個包含數字的城市名稱 - 除了加州的二十九棕櫚樹以外,但這是一個詞。

相關問題