Поскольку у вас есть возвраты в обратном направлении, т. Е. Если он недействителен, верните ноль.
Если вы следили за героями в документах. есть двойные негативы ..
** A hero's name can't match the given regular expression */
export function forbiddenNameValidator(nameRe: RegExp): ValidatorFn {
return (control: AbstractControl): {[key: string]: any} | null => {
const forbidden = nameRe.test(control.value);
return forbidden ? {'forbiddenName': {value: control.value}} : null;
};
}
запрещено - потому что оно не может соответствовать регулярному выражению.
(тест на регулярное выражение вернул бы true для совпадения)
Вот один из моих примеров:
export function min(min: Number): ValidatorFn {
return (control: AbstractControl): {[key: string]: any} => {
const input = control.value,
isValid = input < min;
if(isValid)
return { 'minValue': {min} }
else
return null;
};
}
Дайте мне знать, если это поможет.
Самый простой способ ответить на мой вопрос - показать вам созданный мною класс:
public class HTTPHelp{
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpContext localContext = new BasicHttpContext();
private boolean abort;
private String ret;
HttpResponse response = null;
HttpPost httpPost = null;
public HTTPHelp(){
}
public void clearCookies() {
httpClient.getCookieStore().clear();
}
public void abort() {
try {
if(httpClient!=null){
System.out.println("Abort.");
httpPost.abort();
abort = true;
}
} catch (Exception e) {
System.out.println("HTTPHelp : Abort Exception : "+e);
}
}
public String postPage(String url, String data, boolean returnAddr) {
ret = null;
httpClient.getParams().setParameter(ClientPNames.COOKIE_POLICY, CookiePolicy.RFC_2109);
httpPost = new HttpPost(url);
response = null;
StringEntity tmp = null;
httpPost.setHeader("User-Agent", "Mozilla/5.0 (X11; U; Linux " +
"i686; en-US; rv:1.8.1.6) Gecko/20061201 Firefox/2.0.0.6 (Ubuntu-feisty)");
httpPost.setHeader("Accept", "text/html,application/xml," +
"application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5");
httpPost.setHeader("Content-Type", "application/x-www-form-urlencoded");
try {
tmp = new StringEntity(data,"UTF-8");
} catch (UnsupportedEncodingException e) {
System.out.println("HTTPHelp : UnsupportedEncodingException : "+e);
}
httpPost.setEntity(tmp);
try {
response = httpClient.execute(httpPost,localContext);
} catch (ClientProtocolException e) {
System.out.println("HTTPHelp : ClientProtocolException : "+e);
} catch (IOException e) {
System.out.println("HTTPHelp : IOException : "+e);
}
ret = response.getStatusLine().toString();
return ret;
}
}
Я использовал этот учебник для выполнения моего метода публикации и этих примеры
Что ж, вы можете найти документацию по этой версии HTTPClient
здесь ; особенно полезно просмотреть примерные сценарии , которые они представляют.
К сожалению, я не знаю версию 3 HTTPClient
, поэтому я не могу дать прямые эквиваленты; Я предлагаю вам взять то, что вы пытаетесь сделать, и просмотреть их примеры сценариев.
Вот в httpClient 4 Docs , то есть какой Android использует (4, а не 3, поскольку 1,0-> 2.x). Документы трудно найти (спасибо Apache;)) Потому что httpClient теперь является частью httpComponents (и если вы просто ищете httpClient, вы обычно заканчиваете на веществе 3.x).
Кроме того, если вы выполните любое количество запросов, которые вы не хотите создавать клиента снова и снова. Скорее, как учебники для HTTPClient Note , создайте клиента один раз и сохраните его. Оттуда используются ThreadsafecnectionConeManager .
Я использую класс помощника, например, что-то вроде HTTPhelper (который все еще является движущейся целью - я планирую переместить это на свой собственный проект Android Util в какой-то момент, и поддерживать двоичные данные, Haven ' T еще не договорился), чтобы помочь с этим. Класс HELPER создает клиент и имеет удобные методы обертки для Get / Post / etc. Где вы используете этот класс из активности , вы должны создать внутреннюю внутреннюю Asynctask (так, что вы не блокируете нить пользовательского интерфейса при выполнении запроса), например:
private class GetBookDataTask extends AsyncTask<String, Void, Void> {
private ProgressDialog dialog = new ProgressDialog(BookScanResult.this);
private String response;
private HttpHelper httpHelper = new HttpHelper();
// can use UI thread here
protected void onPreExecute() {
dialog.setMessage("Retrieving HTTP data..");
dialog.show();
}
// automatically done on worker thread (separate from UI thread)
protected Void doInBackground(String... urls) {
response = httpHelper.performGet(urls[0]);
// use the response here if need be, parse XML or JSON, etc
return null;
}
// can use UI thread here
protected void onPostExecute(Void unused) {
dialog.dismiss();
if (response != null) {
// use the response back on the UI thread here
outputTextView.setText(response);
}
}
}