الروبوت المشروع باستخدام HttpClient وإصلاحه -> http.client (اباتشي)، آخر / على طريقة

StackOverflow https://stackoverflow.com/questions/874227

سؤال

وأنا أفعل طريقة المشاركة احصل على ولمشروع الروبوت، وأنا بحاجة إلى "ترجمة" HttpClient وإصلاحه 3.x إلى HttpClient وإصلاحه 4.x من (باستخدام بواسطة الروبوت). مشكلتي هي أنني لست متأكدا من ما فعلت، وأنا لا العثور على "ترجمة" بعض وسائل ...

وهذا هو 3.X HttpClient وإصلاحه وقد فعلت و(->) في 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(...,...); --> ?

وأنا لا أعرف إذا كان هذا هو الصحيح. وقد تسبب هذا في مشاكل لأنه لم تتم تسمية حزم على نحو مماثل، وبعض طرق أيضا. أنا فقط بحاجة الوثائق (لم أجد) والقليل من المساعدة.

هل كانت مفيدة؟

المحلول 2

وأسهل طريقة للإجابة على سؤالي هو لتظهر لك الفئة التي قمت بها:

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;
                }
}

هذا البرنامج التعليمي لأقوم طريقة البريد و أمثلة thoses

نصائح أخرى

وهنا هي HttpClient وإصلاحه 4 مستندات ، وهذا هو ما الروبوت تستخدم (4، وليس 3، اعتبارا من 1.0-> الإصدار 2.x). مستندات من الصعب العثور على (بفضل أباتشي.)) لأن HttpClient وإصلاحه هي الآن جزء من HttpComponents (وإذا كنت مجرد إلقاء نظرة عن HttpClient وإصلاحه وسوف ينتهي عادة حتى في الاشياء 3.X).

وأيضا، إذا كان لديك أي عدد من الطلبات التي لا تريد إنشاء العميل مرارا وتكرارا. بدلا من ذلك، مثل الدروس لHttpClient وإصلاحه ملاحظة أو إنشاء العميل مرة واحدة ويبقيه حولها. من هناك استخدام ThreadSafeConnectionManager .

وأنا استخدم فئة المساعد، على سبيل المثال ما يشبه <لأ href = "http://code.google.com/p/and-bookworm/source/browse/trunk/src/com/totsp/bookworm/data/ HttpHelper.java "يختلط =" نوفولو noreferrer "> HttpHelper (والذي لا يزال هدفا متحركا - I تخطط لنقل هذا المشروع الروبوت UTIL الخاصة في مرحلة ما، ودعم البيانات الثنائية، لم نصل هناك بعد )، للمساعدة في ذلك. الطبقة المساعد يخلق العميل، ولها أساليب المجمع الراحة للالحصول على / مشاركة / الخ. في أي مكان لاستخدام هذه الفئة من آخر ، يجب إنشاء داخلي AsyncTask (بحيث لا تحجب UI الموضوع حين جعل طلب)، على سبيل المثال:

    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);
         }
      }
   }

حسنا، يمكنك العثور على وثائق في هذا الإصدار من 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<String> headlist = new ArrayList<String>();
    ArrayList<String> reportlist = new ArrayList<String>();

    @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<jarr.length();i++){
                    JSONObject e = jarr.getJSONObject(i);
                    JSONArray names = e.names();
                    for(int j=0;j<names.length();j++){
                        String tagname = names.getString(j);
                        if (tagname.equals("ReportID")) {
                            headlist.add(e.getString("ReportID"));
                        }
                        if (tagname.equals("ReportName")) {
                            reportlist.add(e.getString("ReportName"));
                        }
                    }
                }    
            } catch(JSONException e){
                Log.e("retail_home", "Error parsing data "+e.toString());
            }

            Log.d("length ", "head lenght "+headlist.size());
            Log.d("value is  ", "frst "+headlist.get(0));
            Log.d("length ", "name lenght "+reportlist.size());
            Log.d("value is  ", "secnd "+reportlist.get(0));

    }
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top