2011-01-01 10 views
0

私はアンドロイドから安らかなWebサービスに接続します。私は にhttpPostを使用して情報を追加する必要があります。しかし、それは長くかかると私は例外を取得します。 java.net.SocketExceptionが:操作は、私はHTTPGETを作ることができる一方でhttpPostに時間がかかり、この例外が発生します。java.net.SocketException:操作がタイムアウトしました

をタイムアウトし、私は、コードはここにあるすべての例外に

を取ることはありません。

ipはローカルのネットワークのIPアドレスと同じです。 IP = 10.80.20.20

HttpClient httpclient = new DefaultHttpClient(); 
     String url="http://"+ip+"/projectt/source/applySurvey"; 
      HttpPost httppost = new HttpPost(url); 
      String strSurveyId=new Long(surveyId).toString(); 
      try { 
       // Add your data 
       List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2); 
       nameValuePairs.add(new BasicNameValuePair("surveyId",strSurveyId)); 
       nameValuePairs.add(new BasicNameValuePair("questionId", "4")); 

       httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 

       // Execute HTTP Post Request 
       HttpResponse response = httpclient.execute(httppost); 
       HttpEntity entity = response.getEntity(); 

      } catch (ClientProtocolException e) { 
       e.printStackTrace(); 
       // TODO Auto-generated catch block 
      } catch (IOException e) { 
       // TODO Auto-generated catch block 
       e.getCause(); 

私のマニフェストファイルはここにあるRESTfulなWebサービスがweb.xmlファイルに定義されて

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
     package="com.mobil.survey.project" 
     android:versionCode="1" 
     android:versionName="1.0"> 
     <uses-permission android:name="android.permission.INTERNET"/> 
    <application android:icon="@drawable/icon" android:label="@string/app_name"> 
     <activity android:name=".categoryList" 
        android:label="@string/app_name"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
     <activity android:name=".firmsList" android:label="@string/app_name"></activity> 
     <activity android:name=".surveiesList" android:label="@string/app_name"></activity> 
      <activity android:name=".survey" android:label="@string/app_name"></activity> 

    </application> 


</manifest> 

はここ

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"> 
     <display-name>projectt</display-name> 




     <servlet> 
      <servlet-name>FormValidator</servlet-name> 
      <servlet-class>com.project.servlets.FormValidator</servlet-class> 
     </servlet> 
     <servlet-mapping> 
       <servlet-name>FormValidator</servlet-name>  
       <url-pattern>/FormValidator</url-pattern> 
     </servlet-mapping> 

     <servlet> 
     <servlet-name>Jersey REST Service</servlet-name> 
     <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class> 
     <init-param> 
      <param-name>com.sun.jersey.config.property.packages</param-name> 
      <param-value>com.project.resources</param-value> 
     </init-param> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>Jersey REST Service</servlet-name> 
     <url-pattern>/source/*</url-pattern> 
    </servlet-mapping> 

     <welcome-file-list> 
      <welcome-file>index.html</welcome-file> 
      <welcome-file>index.htm</welcome-file> 
      <welcome-file>index.jsp</welcome-file> 
      <welcome-file>default.html</welcome-file> 
      <welcome-file>default.htm</welcome-file> 
      <welcome-file>default.jsp</welcome-file> 
     </welcome-file-list>   
</web-app> 

であると私は接続URIのリソースはここにあります

@Path("/applySurvey") 
public class AppliedSurveyResource { 

    @GET 
    @Produces(MediaType.APPLICATION_JSON) 
    public List<WSCategory> getCategories() { 
     List<WSCategory> categories = new ArrayList<WSCategory>(); 
     categories.addAll(CategoryProvider.instance.getModel()); 
     return categories; 
    } 

@POST 
    @Produces(MediaType.TEXT_HTML) 
    @Consumes(MediaType.APPLICATION_FORM_URLENCODED) 
    public void newTodo(
      @FormParam("surveyId") Long surveyId, 
      @FormParam("questionId") Long questionId, 
      @FormParam("cellId") String cellId, 
      @Context HttpServletResponse servletResponse 
    ) throws IOException { 

     PRAppliedSurvey appliedSurvey=new PRAppliedSurvey(); 
     appliedSurvey.setSurveyId(surveyId); 
     appliedSurvey.setQuestionId(questionId); 
     appliedSurvey.setCellId(cellId); 
     java.util.Date today = new java.util.Date(); 
     System.out.println(new java.sql.Timestamp(today.getTime())); 
     appliedSurvey.setApplyDt(new java.sql.Timestamp(today.getTime())); 
     try { 
      appliedSurvey.store(); 
     } catch (Exception e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

     /*Todo todo = new Todo(id,summary); 
     if (description!=null){ 
      todo.setDescription(description); 
     } 
     TodoDao.instance.getModel().put(id, todo); 

     URI uri = uriInfo.getAbsolutePathBuilder().path(id).build(); 
     Response.created(uri).build(); 

     servletResponse.sendRedirect("../create_todo.html"); 
     */ 
    } 




} 

} 
+0

あなたは(私は「projecttという言葉について話している)あなたのURLが正しいことを確認していますか? – fiction

+0

はい、それについては確かです。私はエラーがソースuriでannotionから来ると思うリソースで@pathparam annotionを使用する私はキーポイントそれを考える?任意のannotaionがpathparのようなuriソースからのhtpp投稿要求を受け取ることを知っています – nopasssaran

答えて

0

AsyncTaskを使用して別のスレッドで実行します。 UIスレッドは、タイムアウトをスローする前にかなり低いしきい値を持っています。これは、ユーザーのUIがフリーズしないようにするためです。

http://developer.android.com/reference/android/os/AsyncTask.html

+0

私はAsyncTaskを使用してそれを書くのを忘れます。私は上のコードを編集する方法を知っていないstackoverflow私はそれをダウンwirte。 – nopasssaran