RESTful HTTP-вызов с Android - PullRequest
       3

RESTful HTTP-вызов с Android

1 голос
/ 17 ноября 2010

Я уже несколько дней пытаюсь сделать RESTful POST-вызов из приложения Android. Я пробовал несколько разных методов, и мне пока не повезло. Кажется, есть несколько проблем, во-первых, я добавил

<uses-permission android:name="android.permission.INTERNET" /> в манифест, чтобы я мог работать с сокетами / сетью.

Тогда я попробовал следующие разные методы, чтобы попытаться получить вызов:

    System.setProperty("java.net.useSystemProxies", "true");
 HttpURLConnection c = (HttpURLConnection) new URL(url+mUrl).openConnection();
 c.setUseCaches(false);
 c.setDoOutput(true);
 c.setRequestMethod("POST");
 c.setRequestProperty("Content-length","9");
 c.setRequestProperty("Content-type", "application/x-www-form-urlencoded");
 c.setRequestProperty("Accept","application/json");
 c.setRequestProperty("Authorization", "basic " + Base64.encodeBytes((username+":"+password).getBytes()));
 c.connect();
 OutputStream os = c.getOutputStream();
 os.write("mode=Push".getBytes());
 os.flush();
 os.close();

Я не уверен, что Android автоматически обрабатывает какие-либо требуемые настройки прокси, я попытался добавить это, но в этом методе c.connect () просто зависает навсегда, без исключений, без таймаута, без возврата.

Следующий метод был следующим:

        DefaultHttpClient httpClient = getClient();
 HttpResponse response = null;  
 HttpPost postMethod = new HttpPost(this.url + mUrl);
 postMethod.addHeader("Content-type", "application/x-www-form-urlencoded");
 postMethod.addHeader("Accept","application/json");
 postMethod.addHeader("Authorization", "basic " + Base64.encodeBytes((username+":"+password).getBytes()));

 if (hm == null) return null;  
 try 
 {  
  List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);  
  Iterator<String> it = hm.keySet().iterator();  
  String k, v;  
  while (it.hasNext()) 
  {  
   k = it.next();  
   v = hm.get(k);  
   nameValuePairs.add(new BasicNameValuePair(k, v));  
  }  
  postMethod.setEntity(new UrlEncodedFormEntity(nameValuePairs));  
  response = httpClient.execute(postMethod); 

Это теперь либо возвращает UnknownHostException, когда я запускаю его с работы, через прокси / брандмауэр или когда я запускаю его из дома, тогда я получаю пустое исключение Challenge. Все это работает под эмулятором приложения Droid 1.6. У меня работает Fiddler2, и я не вижу ничего, выходящего через порт 80 ... Help:)

...