如何从Android客户端连接REST Web服务

时间:2012-08-25 04:31:52

标签: android web-services rest

我有一个简单的REST Web服务,我在我的Android客户端调用。但服务没有解雇。 mu代码有什么问题?请帮帮我!

---------------------------我调用Web服务的方法------------ < / p>

 private static  void getSelectedCoordinates() {
    Log.d("getrespond()", "service calling");

    String block_coordinates = Store_Identified_Block.GetBlock();

 //Wireless port    
//  String url ="http://192.168.43.73:84/NewPS/MobileService.svc/GetSelectedCoordinates?input=285,27-524,77";
 //Local Host
    String url ="http://10.0.2.2:4266/NewPS/MobileService.svc/GetSelectedCoordinates?input=285,27-524,77";

                RestClient client = new RestClient(url);

                try{
                    client.Execute(RestClient.RequestMethod.GET);
                }
                catch (Exception e) {

                    String error = String.valueOf(e);
                         Log.d("**********client.Execute(RequestMethod.GET);***********",error);    

                }

                try {

                    if(client.getResponseCode() == 200) {

                        Log.d("Response is 200", String.valueOf(client.getResponse()));
                        result = String.valueOf(client.getResponse());
                        //Toast.makeText(ctx, "Responce is "+String.valueOf(client.getResponseCode()), 2000).show();                            

                }
                    else {
                        String error = String.valueOf(client.getResponse());
                        Log.d("Response*********** not 200 ************", String.valueOf(client.getResponse()));

                    }
                }catch (Exception e) {
                    e.printStackTrace();
                     Log.d("EXCEPTIONI IS 3", e.toString());
                    // TODO: handle exception
                }
            }

这是我的REST客户端类

package rubs.a;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URLEncoder;
import java.util.ArrayList;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
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.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.methods.HttpUriRequest;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.protocol.HTTP;

import android.util.Log;


public class RestClient {

public enum RequestMethod
{
    GET,
    POST
}
private ArrayList <NameValuePair> params;
private ArrayList <NameValuePair> headers;

private String url;

private int responseCode;
private String message;

private String response;

public String getResponse() {
    return response;
}

public String getErrorMessage() {
    return message;
}

public int getResponseCode() {
    return responseCode;
}

public RestClient(String url)
{
    this.url = url;
    params = new ArrayList<NameValuePair>();
    headers = new ArrayList<NameValuePair>();
}

public void AddParam(String name, String value)
{
    params.add(new BasicNameValuePair(name, value));
}

public void AddHeader(String name, String value)
{
    headers.add(new BasicNameValuePair(name, value));
}

public void Execute(RequestMethod method) throws Exception
{
    switch(method) {
        case GET:
        {
            //add parameters
            String combinedParams = "";
            if(!params.isEmpty()){
                combinedParams += "?";
                for(NameValuePair p : params)
                {
                    String paramString = p.getName() + "=" + URLEncoder.encode(p.getValue(),"UTF-8");
                    if(combinedParams.length() > 1)
                    {
                        combinedParams  +=  "&" + paramString;
                    }
                    else
                    {
                        combinedParams += paramString;
                    }
                }
            }

            HttpGet request = new HttpGet(url + combinedParams);

            //add headers
            for(NameValuePair h : headers)
            {
                request.addHeader(h.getName(), h.getValue());
            }

            executeRequest(request, url);
            break;
        }
        case POST:
        {
            HttpPost request = new HttpPost(url);

            //add headers
            for(NameValuePair h : headers)
            {
                request.addHeader(h.getName(), h.getValue());
                Log.d("aaa", h.getValue());
            }

            if(!params.isEmpty()){
                request.setEntity((HttpEntity) new UrlEncodedFormEntity(params, HTTP.UTF_8));
            }

            executeRequest(request, url);
            break;
        }
    }
}

private void executeRequest(HttpUriRequest request, String url)
{
    HttpClient client = new DefaultHttpClient();

    HttpResponse httpResponse;

    try {
        httpResponse = client.execute(request);
        responseCode = httpResponse.getStatusLine().getStatusCode();
        message = httpResponse.getStatusLine().getReasonPhrase();

        HttpEntity entity = httpResponse.getEntity();

        if (entity != null) {

            InputStream instream = entity.getContent();
            response = convertStreamToString(instream);

            // Closing the input stream will trigger connection release
            instream.close();
        }

    } catch (ClientProtocolException e)  {
        client.getConnectionManager().shutdown();
        e.printStackTrace();
    } catch (IOException e) {
        client.getConnectionManager().shutdown();
        e.printStackTrace();
    }
}

private static String convertStreamToString(InputStream is) {

    BufferedReader reader = new BufferedReader(new InputStreamReader(is));
    StringBuilder sb = new StringBuilder();

    String line = null;
    try {
        while ((line = reader.readLine()) != null) {
            sb.append(line + "\n");
        }
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        try {
            is.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    return sb.toString();
}
}

0 个答案:

没有答案