从Android应用程序休息api web服务调用

时间:2014-06-29 08:31:09

标签: java android rest android-asynctask

我正在尝试从Android应用程序调用其余的api Web服务。 我创建了一个扩展AsyncTask的类来进行其余的调用 以下是代码

package com.example.app;

import java.io.IOException;
import java.io.UnsupportedEncodingException;

import org.apache.http.Header;
import org.apache.http.HttpHost;
import org.apache.http.HttpResponse;
import org.apache.http.auth.AuthenticationException;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.ResponseHandler;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.conn.params.ConnRoutePNames;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.auth.BasicScheme;
import org.apache.http.impl.client.BasicResponseHandler;
import org.apache.http.impl.client.DefaultHttpClient;

import android.annotation.SuppressLint;
import android.os.AsyncTask;
import android.os.StrictMode;

@SuppressLint("NewApi") public class ApiAuthRestGet extends AsyncTask<String
, String,       String> {
static String username = "admin";
static String password = "Admin123";
static String URLBase = "www.openmrs/ws/rest/v1/";
/**
 * HTTP POST
 * @param URLPath
 * @param input
 * @return
 * @throws Exception
 */
//public static Boolean getRequestPost(String URLPath, String input)
  throws   Exception {}
/**
 * HTTP GET
 * @param URLPath
 * @return
 * @throws Exception
 */



public static void setUsername(String username) {
    ApiAuthRestPost.username = username;
}


public static void setPassword(String password) {
    ApiAuthRestPost.password = password;
}


public static void setURLBase(String uRLBase) {
    URLBase = uRLBase;
}
@Override
protected String doInBackground(String... params) {
    HttpHost proxy = new HttpHost("puneproxy.igate.com", 8080);

    String URL = URLBase + params[0];
    String response =  "";
    StrictMode.ThreadPolicy policy = new   StrictMode.ThreadPolicy.Builder()
 .permitAll().build();
    StrictMode.setThreadPolicy(policy);
    DefaultHttpClient httpclient = new DefaultHttpClient();
    httpclient.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY, proxy);
    try {
        HttpGet httpGet = new HttpGet(URL);

        UsernamePasswordCredentials credentials =
 new UsernamePasswordCredentials(username, password);
        BasicScheme scheme = new BasicScheme();
        Header authorizationHeader = null;
        try {
            authorizationHeader = 
scheme.authenticate(credentials, httpGet);
        } catch (AuthenticationException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
          httpGet.addHeader("Proxy-  Authorization",
authorizationHeader.getValue());
        ResponseHandler<String> responseHandler = new BasicResponseHandler();

       System.out.println("Executing request for get: " + httpGet.getRequestLine());

        try {
            response = httpclient.execute(httpGet,responseHandler);
        } catch (ClientProtocolException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        System.out.println("response : "+response);

    } finally {
        httpclient.getConnectionManager().shutdown();
    }
    return response;
}

}

我的工作地点使用代理。 所以我在上面的代码中设置了代理。 我还通过添加以下代码行来更改清单文件。

<uses-permission android:name="android.permission.INTERNET"></uses-permission>

此外,我还将以下行添加到项目的属性

manifestmerger.enabled=true 

我收到以下异常。

 06-27 07:03:49.030: W/System.err(823): 
    java.util.concurrent.ExecutionException:     java.lang.SecurityException:
     Permission    denied (missing INTERNET permission?)
    06-27 07:03:49.030: W/System.err(823):at java.util.concurrent.FutureTask.report
    (FutureTask.java:93)
    06-27 07:03:49.030: W/System.err(823): at  
    java.util.concurrent.FutureTask.get(FutureTask.java:163)
    06-27 07:03:49.040: W/System.err(823):at android.os.AsyncTask.get(AsyncTask.java:483)
    06-27 07:03:49.040: W/System.err(823):at com.example.app.AddPerson$1.onClick
   (AddPerson.java:56)
    06-27 07:03:49.040: W/System.err(823):
    at android.view.View.performClick(View.java:4438)
    06-27 07:03:49.040:
    W/System.err(823): at   android.view.View$PerformClick.run(View.java:18422)
    06-27 07:03:49.040: W/System.err(823):at   android.os.Handler.handleCallback
    (Handler.java:733)
    06-27 07:03:49.040: W/System.err(823): at   android.os.Handler.dispatchMessage
    (Handler.java:95)
    06-27 07:03:49.040: W/System.err(823): 
    at android.os.Looper.loop(Looper.java:136)
    06-27 07:03:49.040: 
    W/System.err(823):at android.app.ActivityThread.main(ActivityThread.java:5017)
    06-27 07:03:49.040: 
    W/System.err(823):at java.lang.reflect.Method.invokeNative(Native Method)
    06-27 07:03:49.040
    : W/System.err(823):at java.lang.reflect.Method.invoke(Method.java:515)
    06-27 07:03:49.040:
    W/System.err(823): at com.android.internal.os.
    ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
    06-27 07:03:49.040: 
    W/System.err(823):                at com.android.internal.os.
    ZygoteInit.main(ZygoteInit.java:595)
    06-27 07:03:49.040: 
    W/System.err(823):                at dalvik.system.NativeStart.main(Native Method)
    06-27 07:03:49.040: W/System.err(823):
    Caused by: java.lang.SecurityException: 
    Permission denied (missing INTERNET permission?)
    06-27 07:03:49.070: W/System.err(823):     
             at java.net.InetAddress.lookupHostByName(InetAddress.java:418)
    06-27 07:03:49.070: W/System.err(823):            
      at java.net.InetAddress.getAllByNameImpl(InetAddress.java:236)
    06-27 07:03:49.070: W/System.err(823):            
    at java.net.InetAddress.getAllByName(InetAddress.java:214)
    06-27 07:03:49.080: W/System.err(823):             
    at   org.apache.http.impl.conn.
     DefaultClientConnectionOperator.openConnection
    (DefaultClientConnectionOperator.java:137)
    06-27 07:03:49.080: W/System.err(823):at   org.apache.http.impl.conn.
    AbstractPoolEntry.open(AbstractPoolEntry.java:164)
    06-27 07:03:49.080:
    W/System.err(823):at org.apache.http.impl.conn.
    AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119)
    06-27 07:03:49.090: W/System.err(823):         
       at org.apache.http.impl.client.
    DefaultRequestDirector.execute(DefaultRequestDirector.java:360)
    06-27 07:03:49.090: W/System.err(823):                
    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
    06-27 07:03:49.100: W/System.err(823):                
    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:653)
    06-27 07:03:49.100: W/System.err(823):                
     at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:627)
    06-27 07:03:49.100: W/System.err(823):                
    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:616)
    06-27 07:03:49.110: W/System.err(823):                
     at com.example.app.ApiAuthRestGet.doInBackground(ApiAuthRestGet.java:96)
     06-27 07:03:49.110: W/System.err(823):                
     at com.example.app.ApiAuthRestGet.doInBackground(ApiAuthRestGet.java:1)
    06-27 07:03:49.110: W/System.err(823):                
    at android.os.AsyncTask$2.call(AsyncTask.java:288)
    06-27 07:03:49.120: W/System.err(823):                
    at java.util.concurrent.FutureTask.run(FutureTask.java:237)
    06-27 07:03:49.120: W/System.err(823):                
    at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
    06-27 07:03:49.120: W/System.err(823):                
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
    06-27 07:03:49.130: W/System.err(823):                
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
     06-27 07:03:49.130: W/System.err(823):               
     at java.lang.Thread.run(Thread.java:841)
    06-27 07:03:49.130: W/System.err(823): 
     Caused by: libcore.io.GaiException: 
     getaddrinfo failed: EAI_NODATA (No address associated with hostname)
    06-27 07:03:49.160: W/System.err(823):                
    at libcore.io.Posix.getaddrinfo(Native Method)
    06-27 07:03:49.160: W/System.err(823):                
    at libcore.io.ForwardingOs.getaddrinfo(ForwardingOs.java:61)
    06-27 07:03:49.160: W/System.err(823):                
    at java.net.InetAddress.lookupHostByName(InetAddress.java:405)
     06-27 07:03:49.170: W/System.err(823):                ... 18 more
     06-27 07:03:49.180: W/System.err(823): 
     Caused by: libcore.io.ErrnoException:      
     getaddrinfo failed: EACCES (Permission denied)

我没有自己设计网络服务。 但我正在使用在线休息api的网络服务。 我不能使用Retrofit重新设计Web服务。 请帮我解决这个问题

0 个答案:

没有答案