2011-05-04 3 views
0

이클립스를 사용하여 안드로이드에서 응용 프로그램을 설정하는 데 도움이 필요합니다.안드로이드 이클립스 설정 http 웹 서버에 대한 POST 및 GET GET.

저는 이클립스를 자바 개발에 사용하지 않았기 때문에이 모든 것이 안드로이드와 어떻게 조화를 이루는 지에 관해서는 약간 초록색입니다.

액세스 할 때 출력을 생성하도록 설정된 웹 서버로 테스트하기 위해 다운로드 한 스크립트가 있습니다 (JSON은이 시점에서 값 쌍으로 명명 됨).

내가 사용하고 -
이클립스 IDE 자바 개발자
버전을 위해 : 헬리오스 서비스 릴리스 2
빌드 ID : 20110218-0911

안드로이드 개발 툴킷
버전 : 10.0.1.v201103111512-110841

지금까지

자바 코드 -

package new.android.test; 

import android.app.Activity; 
import android.os.Bundle; 
import java.io.ByteArrayInputStream; 
import java.net.Socket; 

import org.apache.http.ConnectionReuseStrategy; 
import org.apache.http.HttpEntity; 
import org.apache.http.HttpHost; 
import org.apache.http.HttpRequestInterceptor; 
import org.apache.http.HttpResponse; 
import org.apache.http.HttpVersion; 
import org.apache.http.entity.ByteArrayEntity; 
import org.apache.http.entity.InputStreamEntity; 
import org.apache.http.entity.StringEntity; 
import org.apache.http.impl.DefaultConnectionReuseStrategy; 
import org.apache.http.impl.DefaultHttpClientConnection; 
import org.apache.http.message.BasicHttpEntityEnclosingRequest; 
import org.apache.http.params.HttpParams; 
import org.apache.http.params.HttpProtocolParams; 
import org.apache.http.params.SyncBasicHttpParams; 
import org.apache.http.protocol.HttpContext; 
import org.apache.http.protocol.BasicHttpContext; 
import org.apache.http.protocol.ExecutionContext; 
import org.apache.http.protocol.HttpProcessor; 
import org.apache.http.protocol.HttpRequestExecutor; 
import org.apache.http.protocol.ImmutableHttpProcessor; 
import org.apache.http.protocol.RequestConnControl; 
import org.apache.http.protocol.RequestContent; 
import org.apache.http.protocol.RequestExpectContinue; 
import org.apache.http.protocol.RequestTargetHost; 
import org.apache.http.protocol.RequestUserAgent; 
import org.apache.http.util.EntityUtils; 

/** 
* Elemental example for executing a POST request. 
* <p> 
* Please note the purpose of this application is demonstrate the usage of HttpCore APIs. 
* It is NOT intended to demonstrate the most efficient way of building an HTTP client. 
* 
* 
* 
*/ 

public class search extends Activity { 

    public static void main(String[] args) throws Exception { 

     HttpParams params = new SyncBasicHttpParams(); 
     HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1); 
     HttpProtocolParams.setContentCharset(params, "UTF-8"); 
     HttpProtocolParams.setUserAgent(params, "HttpComponents/1.1"); 
     HttpProtocolParams.setUseExpectContinue(params, true); 

     HttpProcessor httpproc = new ImmutableHttpProcessor(new HttpRequestInterceptor[] { 
       // Required protocol interceptors 
       new RequestContent(), 
       new RequestTargetHost(), 
       // Recommended protocol interceptors 
       new RequestConnControl(), 
       new RequestUserAgent(), 
       new RequestExpectContinue()}); 

     HttpRequestExecutor httpexecutor = new HttpRequestExecutor(); 

     HttpContext context = new BasicHttpContext(null); 

     HttpHost host = new HttpHost("localhost", 80); 

     DefaultHttpClientConnection conn = new DefaultHttpClientConnection(); 
     ConnectionReuseStrategy connStrategy = new DefaultConnectionReuseStrategy(); 

     context.setAttribute(ExecutionContext.HTTP_CONNECTION, conn); 
     context.setAttribute(ExecutionContext.HTTP_TARGET_HOST, host); 

     try { 

      HttpEntity[] requestBodies = { 
        new StringEntity(
          "This is the first test request", "UTF-8"), 
        new ByteArrayEntity(
          "This is the second test request".getBytes("UTF-8")), 
        new InputStreamEntity(
          new ByteArrayInputStream(
            "This is the third test request (will be chunked)" 
            .getBytes("UTF-8")), -1) 
      }; 

      for (int i = 0; i < requestBodies.length; i++) { 
       if (!conn.isOpen()) { 
        Socket socket = new Socket(host.getHostName(), host.getPort()); 
        conn.bind(socket, params); 
       } 
       BasicHttpEntityEnclosingRequest request = new BasicHttpEntityEnclosingRequest("POST", 
         "/android.php"); 
       request.setEntity(requestBodies[i]); 
       System.out.println(">> Request URI: " + request.getRequestLine().getUri()); 

       request.setParams(params); 
       httpexecutor.preProcess(request, httpproc, context); 
       HttpResponse response = httpexecutor.execute(request, conn, context); 
       response.setParams(params); 
       httpexecutor.postProcess(response, httpproc, context); 

       System.out.println("<< Response: " + response.getStatusLine()); 
       System.out.println(EntityUtils.toString(response.getEntity())); 
       System.out.println("=============="); 
       if (!connStrategy.keepAlive(response, context)) { 
        conn.close(); 
       } else { 
        System.out.println("Connection kept alive..."); 
       } 
      } 
     } finally { 
      conn.close(); 
     }   
    } 

} 

기본 질문은 왜 그렇게 많은 수입입니까?

또한 나는이 수입에 대한 오류를 얻고있다 :

The import org.apache.http.params.SyncBasicHttpParams cannot be resolved 
The import org.apache.http.protocol.ImmutableHttpProcessor cannot be resolved 

내가 android.jar에서 이러한 클래스를 볼 수 없습니다.

웹 서버에 대한 트랜잭션을 구현하여 안드로이드 자바 애플리케이션에서 사용하기위한 JSON (namevaluepair)을 얻는 간단한 예제가 있습니까?

답변

0

참조하는 클래스가 표준 Android 배포에 포함되어 있지 않기 때문에 이러한 오류가 발생합니다. http://developer.android.com/reference/org/apache/http/params/package-summary.htmlhttp://developer.android.com/reference/org/apache/http/protocol/package-summary.html을 참조하십시오.

안드로이드는 특정 버전의 Apache HTTP 라이브러리를 리 패키징합니다. 이러한 클래스를 사용하려면 해당 항아리를 포함시켜야합니다.

+0

어떻게 그 항아리를 포함합니까? 비표준 안드로이드 병을 포함하면 안드로이드 장치에서 실행하는 데 문제가 있습니까? – Heals1ic

+0

글쎄, 어떤 아파치 jar를 포함시켜야할지 모르겠다. 이전에 가지고 있던 코드를 사용하고 있다고 가정하기 때문에, 그 코드가 어디에 있든간에 올바른 jar 파일을 가리켜 야한다. 이클립스 프로젝트에 추가하기 만하면됩니다. 기기에 문제가 있어서는 안됩니다. – Femi

+0

알았어요. 지금 분류했습니다. 추가 패키지를 빌드 경로의 일부로 포함 시켰으며 그 이상의 오류는 없었습니다. – Heals1ic