2011-05-04 43 views
0

我需要幫助,以使用eclipse在android中設置應用程序。安卓eclipse設置http POST和GET針對web服務器

我之前沒有使用eclipse進行JAVA開發,所以我對於如何將這些全部與android混合在一起來說有點綠。

我有一個腳本,我下載了測試與我的網絡服務器已設置爲產生輸出時訪問(此時JSON命名值對)。

我使用 -
Eclipse IDE的Java開發人員
版本:赫利俄斯服務版本2
版本ID:20110218-0911

的Android開發工具包
版本:10.0.1.v201103111512-110841

迄今爲止Java代碼 -

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這些類。

是否有一個更簡單的例子來實現一個Web服務器的事務來獲取在android java應用程序中使用的namevaluepair(JSON)?

回答

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

Android重新包裝特定版本的Apache HTTP庫。如果你想使用這些類,你需要包括這些罐子。

+0

如何包含這些罐子? 如果我包含非標準的Android JAR,我會在運行Android設備時遇到麻煩嗎? – Heals1ic 2011-05-04 03:32:07

+0

嗯,我不知道你需要包括哪些特定的Apache jar:我假設你正在使用以前的代碼,所以無論你從哪裏獲得代碼,都應該指向正確的jar文件。只需將它們添加到您的eclipse項目中,您應該很好。它不應該是你的設備的問題。 – Femi 2011-05-04 04:33:01

+0

好的,我現在排序。我已經將額外的軟件包作爲構建路徑的一部分,並且沒有更多的錯誤 – Heals1ic 2011-05-05 04:45:19