2016-09-03 7 views
-1

私はアンドロイドデバイスからHTTP Postを実行していますが、何らかの理由でpostが数秒で実行されますが、画面はまだ18秒または20秒以上フリーズしています。Androidフリーズ画面HTTPポスト実行後20秒

私が使用しているコードは次のとおりです。

public boolean CommentPost(String comment, String requestId, String deviceId){ 
      List<NameValuePair> params = new ArrayList<NameValuePair>(6); 
      params.add(new BasicNameValuePair("requestId", requestId)); 
      params.add(new BasicNameValuePair("comment", URLEncoder.encode(requestId))); 
      params.add(new BasicNameValuePair("deviceId", URLEncoder.encode(deviceId))); 

      return ExecutePost(params, "Comment/Add"); 
     } 

private boolean ExecutePost(List<NameValuePair> params, String url){ 
     String queryString = RewriteParams(params); 
     url = BaseURL + url + queryString; 
     HttpClient httpclient = new DefaultHttpClient(); 
     HttpPost httppost = new HttpPost(url); 

     try { 
      StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); 
      StrictMode.setThreadPolicy(policy); 

      httppost.setEntity(new UrlEncodedFormEntity(params)); 
      HttpResponse response = httpclient.execute(httppost); 

      return true; 
     } catch (ClientProtocolException e) { 
      return false; 
     } catch (IOException e) { 
      return false; 
     } 
    } 

私はアヤックスと(郵便配達などの)いくつかのHTTPクライアントで動作をテストし、要求が実行される1または2秒未満を受け取り、取得応答。 なぜAndroidでもっと話しているのですか?

+3

になることを覚えておいてくださいメインスレッドでネットワーク要求は、バックグラウンドで実行する必要があります。非同期タスクまたはボレー –

+0

@MueyiwaMosesIkomiを使用してみてください。これをメインスレッドで実行しようとすると 'android.os.NetworkOnMainThreadException'が発生しませんか? – tpk

+0

あなたが言ったように、それはあまりにもありますが、その郵便配達員の1秒の実行です。 –

答えて

2
class Check extends AsyncTask<String, Integer, Boolean> { 

    @Override 
    protected Boolean doInBackground(String... params) { 



      //Add main arguments here; Connection that reffers to other methods but 
    String queryString = RewriteParams(params); 
    url = BaseURL + url + queryString; 
    HttpClient httpclient = new DefaultHttpClient(); 
    HttpPost httppost = new HttpPost(url); 

    try { 

     httppost.setEntity(new UrlEncodedFormEntity(params)); 
     HttpResponse response = httpclient.execute(httppost); 

     return true; 
    } catch (ClientProtocolException e) { 
     return false; 
    } catch (IOException e) { 
     return false; 
    } 
     return null; 
    } 
} 

などのように実行します。

new Check().execute("http://website.com"); 

したい場合は、そこにURLを追加することができます。それが固定リンクであれば、それは自然ではない。

メインスレッドで接続を実行できるように追加しましたが、スレッドが正しく構築されていないと思います。

while(bool = true){ 
    connection code 
} 
rendering code 

これはすべて接続して実行している間に、接続要件のために他のタスクを実行できません。 asyncを実行すると、メインスレッドを妨げることなく接続することができます。

あなたは文字列、整数およびブールとは異なる引数が必要な場合は、私はそのCOSは、あなたがこれを実行していると思う最初の変数は、doInBackground内のparamsで一つであり、最後の引数、戻り値

+0

私はそれをテストしていますが、これは1つだけです: 'new Check()。' not new 'Check.execute' – MrMins

+0

oops。私の悪い... – Zoe

関連する問題