Android-проект с использованием httpclient -> http.client (apache), метод post / get

Я делаю метод Get и Post для проекта android, и мне нужно «перевести» HttpClient 3.x на HttpClient 4.x (используя android). Моя проблема в том, что я не уверен, что я сделал, и я не нахожу «перевод» некоторых методов …

Это HttpClient 3.x я сделал и (->) HttpClient 4.x «перевод», если я его нашел (только стороны, которые задают мне проблемы):

HttpState state = new HttpState (); --> ? HttpMethod method = null; --> HttpUriRequest httpUri = null; method.abort(); --> httpUri.abort(); //httpUri is a HttpUriRequest method.releaseConnection(); --> conn.disconnect(); //conn is a HttpURLConnection state.clearCookies(); --> cookieStore.clear(); //cookieStore is a BasicCookieStore HttpClient client = new HttpClient(); --> DefaultHttpClient client = new DefaultHttpClient(); client.getHttpConnectionManager().getParams().setConnectionTimeout(SOCKET_TIMEOUT) --> HttpConnectionParams.setConnectionTimeout(param, SOCKET_TIMEOUT); client.setState(state); --> ? client.getParams().setCookiePolicy(CookiePolicy.RFC_2109); --> HttpClientParams.setCookiePolicy(param, CookiePolicy.RFC_2109); PostMethod post = (PostMethod) method; --> ? post.setRequestHeader(...,...); --> conn.setRequestProperty(...,...); post.setFollowRedirects(false); --> conn.setFollowRedirects(false); RequestEntity tmp = null; --> ? tmp = new StringRequestEntity(...,...,...); --> ? int statusCode = client.executeMethod(post); --> ? String ret = method.getResponsBodyAsString(); --> ? Header locationHeader = method.getResponseHeader(...); --> ? ret = getPage(...,...); --> ? 

Я не знаю, правильно ли это. Это вызвало проблемы, потому что пакеты не называются аналогично, а также некоторые методы. Мне просто нужна документация (я не нашел) и небольшую помощь.

Спасибо заранее за вашу помощь. Майкл

Вот документы HttpClient 4 , которые использует Android (4, а не 3, начиная с 1.0-> 2.x). Документы трудно найти (спасибо Apache;)), потому что HttpClient теперь является частью HttpComponents (и если вы просто ищете HttpClient, вы, как правило, попадете в материал 3.x).

Кроме того, если вы выполняете любое количество запросов, вы не хотите создавать клиент снова и снова. Скорее, как учебники для HttpClient , создайте клиента один раз и сохраните его. Оттуда используйте ThreadSafeConnectionManager .

Я использую class-помощник, например, что-то вроде HttpHelper (которое все еще является движущейся целью), я планирую в какой-то момент перенести это на свой собственный проект Android util, и поддерживать двоичные данные еще не получили), чтобы помочь с это. Хелпер-class создает клиента и имеет методы удобства обхода для get / post / etc. В любом случае, когда вы используете этот class из Activity , вы должны создать внутреннюю внутреннюю AsyncTask (чтобы вы не блокировали stream пользовательского интерфейса при выполнении запроса), например:

  private class GetBookDataTask extends AsyncTask { 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); } } } 

Самый простой способ ответить на мой вопрос – показать вам class, который я сделал:

 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 () ясно ().

     }

     public void abort () {

         пытаться {
             если (HTTPClient! = NULL) {
                 System.out.println ( "Прервать".);
                 httpPost.abort ();
                 abort = true;
             }
         } catch (Исключение e) {
             System.out.println ("HTTPHelp: Исключение прерывания:" + e);
         }
     }

     public String postPage (String url, String data, boolean returnAddr) {

         ret = null;

         httpClient.getParams (). setParameter (ClientPNames.COOKIE_POLICY, CookiePolicy.RFC_2109);

         httpPost = новый 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», +
             "Приложение / XHTML + XML, текст / HTML; д = 0,9, текст / обычный; д = 0,8, изображение / PNG, * / *; д = 0,5");
         httpPost.setHeader («Content-Type», «application / x-www-form-urlencoded»);

         пытаться {
             tmp = new StringEntity (данные, «UTF-8»);
         } catch (UnsupportedEncodingException e) {
             System.out.println ("HTTPHelp: UnsupportedEncodingException:" + e);
         }

         httpPost.setEntity (TMP);

         пытаться {
             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;
                 }
 }

Я использовал этот учебник, чтобы выполнить свой метод публикации и примеры thoses (спасибо Daniel).

Спасибо за вашу помощь.

Здесь вы можете найти документацию по этой версии HTTPClient ; особенно полезно пройти примерные сценарии, которые они представляют.

Я, к сожалению, не знаю версии 3 HTTPClient поэтому я не могу дать прямую эквивалентность; Я предлагаю вам взять то, что вы пытаетесь сделать, и просмотреть их примерные сценарии.

  package com.service.demo; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.List; import org.apache.http.HttpResponse; import org.apache.http.client.ClientProtocolException; import org.apache.http.client.HttpClient; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.HttpPost; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.message.BasicNameValuePair; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import org.ksoap2.SoapEnvelope; import org.ksoap2.serialization.SoapObject; import org.ksoap2.serialization.SoapSerializationEnvelope; import org.ksoap2.transport.HttpTransportSE; import android.app.Activity; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.Toast; public class WebServiceDemoActivity extends Activity { /** Called when the activity is first created. */ private static String SOAP_ACTION1 = "http://tempuri.org/GetSubscriptionReportNames";//"http://tempuri.org/FahrenheitToCelsius"; private static String NAMESPACE = "http://tempuri.org/"; private static String METHOD_NAME1 = "GetSubscriptionReportNames";//"FahrenheitToCelsius"; private static String URL = "http://icontrolusa.com:8040/iPhoneService.asmx?WSDL"; Button btnFar,btnCel,btnClear; EditText txtFar,txtCel; ArrayList headlist = new ArrayList(); ArrayList reportlist = new ArrayList(); @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); btnFar = (Button)findViewById(R.id.btnFar); btnCel = (Button)findViewById(R.id.btnCel); btnClear = (Button)findViewById(R.id.btnClear); txtFar = (EditText)findViewById(R.id.txtFar); txtCel = (EditText)findViewById(R.id.txtCel); btnFar.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //Initialize soap request + add parameters SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME1); //Use this to add parameters request.addProperty("Fahrenheit",txtFar.getText().toString()); //Declare the version of the SOAP request SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); envelope.setOutputSoapObject(request); envelope.dotNet = true; try { HttpTransportSE androidHttpTransport = new HttpTransportSE(URL); //this is the actual part that will call the webservice androidHttpTransport.call(SOAP_ACTION1, envelope); // Get the SoapResult from the envelope body. SoapObject result = (SoapObject)envelope.bodyIn; if(result != null) { //Get the first property and change the label text txtCel.setText(result.getProperty(0).toString()); Log.e("err ","output is :::: "+result.getProperty(0).toString()); parseSON(); } else { Toast.makeText(getApplicationContext(), "No Response",Toast.LENGTH_LONG).show(); } } catch (Exception e) { e.printStackTrace(); } } }); btnClear.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { txtCel.setText(""); txtFar.setText(""); } }); } private void parseSON() { headlist.clear(); reportlist.clear(); String text = txtCel.getText().toString() ;//sb.toString(); Log.i("######", "###### "+text); try{ JSONObject jobj = new JSONObject(text); JSONArray jarr = jobj.getJSONArray("Head"); for(int i=0;i 
  • Как я могу реализовать пользовательскую панель действий с пользовательскими кнопками в Android?
  • путь к файлу Windows в формате java
  • Как зарегистрировать некоторое пространство имен URL (myapp: //app.start/) для доступа к вашей программе, вызывая URL-адрес в браузере в ОС Android?
  • Модель памяти Dalvik такая же, как Java?
  • Почему вызовы метода интерфейса медленнее, чем конкретные вызовы?
  • BroadcastReceiver для ACTION_MEDIA_BUTTON не работает
  • Как получить случайную строку текстового файла в Java?
  • Android разнородный gridview как pinterest?
  • Gson - конвертировать из Json в типизированный ArrayList
  • Как преобразовать двоичное строковое значение в десятичное
  • getSearchForm возвращает значение null при использовании UserSearch в XMPP с помощью aSmack
  • Interesting Posts

    Не удается установить pg gem на Mountain Lion

    Что делает InputStream.available () в Java?

    Прокрутка JTable до указанного указателя строки

    Получить представление корня из текущей активности

    Разбор JSON для JSON для JSON в JSONObject

    EF6.0 “Связь не может быть изменена, поскольку одно или несколько свойств внешнего ключа не могут быть обнулены”

    Слишком длинное имя файла (только для проводника Windows)

    Как редактировать хосты в Windows 7?

    Показывать сообщения из других папок в режиме разговора в Outlook for Mac 2011

    В чем разница между портом и сокетом?

    Возможно ли / хорошая практика использовать один и тот же закрытый ключ для двух серверов для входа без пароля с одного и того же рабочего места / локального сервера?

    Структуры данных .NET: ArrayList, List, HashTable, Словарь, SortedList, SortedDictionary – Скорость, память и когда использовать их?

    Как delete и deleteLater работает с сигналами и слотами в Qt?

    Объемное пространство с кавычками

    Как изменить цвет красной кнопки закрытия в Windows 8?

    Давайте будем гением компьютера.