2010-07-12 41 views
4

我想在Android上实现Web服务..我想使用我的设备作为服务器。在互联网上做一些研究之后,我发现了几个选项:在Android上创建Web服务的最佳方式

  • SerDroid(针对Android平台的小型web服务器)

  • I-码头(开源Web容器运行在Android移动设备平台上)

  • KWS(专为android移动设备设计的轻量级和快速web服务器)

什么是最好的?

或者,我可以用REST + JSON在Android上导入Web服务?我不那么已了解很多东西是REST + JSON ...

+3

可能很难。如果你能解释你的最终目标是什么,那么可能有人可以给你完全不同的解决方案? – 2010-07-12 10:42:56

+0

嗨!我希望一个模拟器可以调用在另一个模拟器上运行的服务......该服务可能只是“Hello World”。我对这种交流特别感兴趣。谢谢 – Deborah 2010-07-12 13:50:03

+0

@Deborah,请通过编辑原始问题添加您的说明,以便其他人可以轻松查看信息。 – 2012-10-26 06:30:09

回答

0

这里examplse REST + JSON服务

package rainprod.utils.internetservice; 

import java.io.ByteArrayOutputStream; 
import java.io.DataInputStream; 
import java.io.IOException; 

import org.apache.http.HttpEntity; 
import org.apache.http.HttpResponse; 
import org.apache.http.client.ClientProtocolException; 
import org.apache.http.client.methods.HttpPost; 
import org.apache.http.entity.StringEntity; 
import org.apache.http.impl.client.DefaultHttpClient; 
import org.apache.http.message.BasicHeader; 
import org.apache.http.params.BasicHttpParams; 
import org.apache.http.params.HttpConnectionParams; 
import org.apache.http.params.HttpParams; 
import org.apache.http.protocol.HTTP; 
import org.json.JSONObject; 

import android.os.Handler; 
import android.os.Message; 

public abstract class InternetService extends Handler { 

    public static final int CONNECTING = 1; 
    public static final int UPLOADING = 2; 
    public static final int DOWNLOADING = 3; 
    public static final int COMPLETE = 4; 
    public static final int ERROR = -1; 


    private IInternetService listener; 

    public InternetService(IInternetService listener) { 
     this.listener = listener; 
    } 

    public DefaultHttpClient getDefaultClient() { 
     HttpParams httpParams = new BasicHttpParams(); 
     HttpConnectionParams.setConnectionTimeout(httpParams, 15000); 
     HttpConnectionParams.setSoTimeout(httpParams, 15000); 
     DefaultHttpClient httpClient = new DefaultHttpClient(httpParams); 
     return httpClient; 
    } 

    public void postJson(JSONObject postObject, String functionName, int responseCode, 
      int subResponseCode, boolean isThreadly) { 
     DefaultHttpClient httpClient = this.getDefaultClient(); 
     HttpPost postRequest = new HttpPost(this.getServiceURLString() + functionName); 

     this.restApiPostRequest(httpClient, postRequest, postObject, 
       responseCode, subResponseCode); 
    } 

    abstract public String getServiceURLString(); 



    public void restApiPostRequest(final DefaultHttpClient httpclient, 
      final HttpPost request, final JSONObject postObject, 
      final int responseCode, final int subResponseCode) { 
     new Thread(new Runnable() { 

      @Override 
      public void run() { 

       try { 
        try { 
         StringEntity se = new StringEntity(postObject 
           .toString(), HTTP.UTF_8); 
         se.setContentType(new BasicHeader(HTTP.CONTENT_TYPE, 
           "application/json")); 
         request.setEntity(se); 
         HttpResponse response = httpclient.execute(request); 
         HttpEntity entity = response.getEntity(); 
         if (entity != null) { 
          ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
          DataInputStream dis = new DataInputStream(entity 
            .getContent()); 
          byte[] buffer = new byte[1024];// In bytes 
          int realyReaded; 
          double contentSize = entity.getContentLength(); 
          double readed = 0L; 
          while ((realyReaded = dis.read(buffer)) > -1) { 
           baos.write(buffer, 0, realyReaded); 
           readed += realyReaded; 
           sendProgressMessage((double) contentSize, 
             readed, responseCode, DOWNLOADING); 
          } 
          sendCompleteMessage(new InternetServiceResponse(
            responseCode, baos, subResponseCode), 
            COMPLETE); 
         } else { 

          sendErrorMessage(responseCode, 
            new Exception("Null"), request.getURI() 
              .toString(), ERROR); 

         } 
        } catch (ClientProtocolException e) { 
         sendErrorMessage(responseCode, e, request.getURI() 
           .toString(), ERROR); 
        } catch (IOException e) { 
         sendErrorMessage(responseCode, e, request.getURI() 
           .toString(), ERROR); 
        } catch (OutOfMemoryError e) { 
         sendErrorMessage(responseCode, new Exception(
           "Out memory"), request.getURI().toString(), 
           ERROR); 
        } finally { 
         httpclient.getConnectionManager().shutdown(); 
        } 
       } catch (NullPointerException e) { 
        sendErrorMessage(responseCode, e, request.getURI() 
          .toString(), ERROR); 

       } 

      } 
     }).start(); 

    } 

    private void sendProgressMessage(double contentSize, double readed, 
      int responseCode, int progressCode) { 
     this.sendMessage(this.obtainMessage(progressCode, 
       new InternetServiceResponse(contentSize, readed, responseCode))); 

    } 

    protected void sendErrorMessage(int responseCode, Exception exception, 
      String string, int errorCode) { 
     this.sendMessage(this.obtainMessage(
       errorCode, 
       new InternetServiceResponse(responseCode, exception 
         .getMessage()))); 
    } 

    protected void sendCompleteMessage(InternetServiceResponse serviceResponse, 
      int completeCode) { 
     this.sendMessage(this.obtainMessage(completeCode, serviceResponse)); 
    } 

    @Override 
    public void handleMessage(Message msg) { 
     final InternetServiceResponse bankiServiceResponse = (InternetServiceResponse) msg.obj; 
     switch (msg.what) { 
     case UPLOADING: 

      break; 

     case DOWNLOADING: 
      this.listener.downloadingData(bankiServiceResponse.contentSize, 
        bankiServiceResponse.readed, 
        bankiServiceResponse.responseCode); 
      break; 
     case COMPLETE: 
      this.listener.completeDownload(bankiServiceResponse); 
      break; 
     case ERROR: 
      this.listener.errorHappen(bankiServiceResponse.textData, 
        bankiServiceResponse.responseCode); 
      break; 

     } 

    } 

} 

而且例如利用对UserAPI

package ru.orionsource.missingcar.api; 

import rainprod.utils.internetservice.IInternetService; 
import rainprod.utils.internetservice.InternetService; 
import ru.orionsource.missingcar.classes.User; 

public class UserAPI extends InternetService { 

    public UserAPI(IInternetService listener) { 
     super(listener); 
    } 

    @Override 
    public String getServiceURLString() { 
     return "http://ugnali.orionsource.ru/u_api/?apiuser."; 
    } 

    public void userLogin(User user) { 
     this.postJson(user.toJson(), "logonUser", 1, 0, true); 
    } 

} 

,并从源代码调用:

this.userAPI = new UserAPI(this); 
User selected = new User(); 
selected.email = this.accounts.get(arg2).name; 
this.userAPI.userLogin(selected); 
+0

您的代码不完整。 – Ricardo 2014-11-26 22:42:42

相关问题