2016-03-22 22 views
0

私はAndroidアプリケーションを開発しようとしています。アプリケーションが起動するたびに、サーバーからいくつかの詳細を取得する必要があります。私はそれにasynctaskを使用しており、私はそれをonCreateの方法でアンドロイドで呼び出しています。サーバーが動作しているときには完全に動作しますが、サーバーが動作していないときは、アプリケーションがタイムアウトするのを待ってサーバーが動作していないことを知りたくありません。実装するためのより良い方法は何ですか?私の現在の方法では、タイムアウトが起こるまでアプリケーションは止まっています。Asynctaskがつまずく

+0

正常に動作しますasyncTask.execute().get();を使用していましたか? AsyncTaskを使用している場合、アプリケーションはフリーズしません。コードを表示するように質問を編集 –

+0

使用してください、それはそれを処理します。 –

+1

asynctaskの場合、なぜスタックされますか?あなたはoncreateでasynctaskの "get"を呼び出しますか?(それはその後、タスクを待っていて、止まってしまいます)それを避けて、それをonPostExecuteで行います – Riddim

答えて

0

私はasyncTask.execute()に変更したときには、接続にタイムアウトを追加

0

あなたが

urlConnection.setReadTimeout(10000); 
urlConnection.setConnectTimeout(15000); 

完全なソースコードは以下のとおりである次のコードを使用してHttpURLConnectionにTIMOUTを追加することができます。歓声:)

public class MainActivity extends AppCompatActivity { 

      @Override 
      protected void onCreate(Bundle savedInstanceState) { 
       super.onCreate(savedInstanceState); 
       setContentView(R.layout.activity_main); 
       new Test().execute(); 
      } 


      //AsyncTask 
      class Test extends AsyncTask < String, Void, String > { 

       @Override 
       protected String doInBackground(String...params) { 
       InputStream in = null; 
       String queryResult = ""; 
       URL url = new URL("http://www.android.com/"); 
       HttpURLConnection urlConnection = (HttpURLConnection)   url.openConnection(); 

       //add parameters 
       urlConnection.setReadTimeout(10000); 
       urlConnection.setConnectTimeout(15000); 
       urlConnection.setRequestMethod("POST"); 
       urlConnection.setDoInput(true); 
       urlConnection.setDoOutput(true); 

      List<NameValuePair> params = new ArrayList<NameValuePair>(); 
      params.add(new BasicNameValuePair("firstParam", paramValue1)); 
      params.add(new BasicNameValuePair("secondParam", paramValue2)); 
      params.add(new BasicNameValuePair("thirdParam", paramValue3)); 
       try { 
      //write OutputStream 
      OutputStream os = urlConnection.getOutputStream(); 
      BufferedWriter writer = new BufferedWriter(
        new OutputStreamWriter(os, "UTF-8")); 
      writer.write(getQuery(params)); 
      writer.flush(); 
      writer.close(); 
      os.close(); 


       InputStream in = new  BufferedInputStream(urlConnection.getInputStream()); 
       queryResult = readStream(in); 
       } finally { 
       urlConnection.disconnect(); 
       } 
       return queryResult; 

       } 
       private String readStream(InputStream iStream) throws IOException { 

       //Buffered reader allows us to read line by line 
       try (BufferedReader bReader = 
       new BufferedReader(new InputStreamReader(iStream))) { 
       StringBuilder builder = new StringBuilder(); 
       String line; 
       while ((line = bReader.readLine()) != null) { //Read till end 
       builder.append(line); 
       } 
       return builder.toString(); 
       } 
       } 
      private String getQuery(List<NameValuePair> params) throws UnsupportedEncodingException 
      { 
       StringBuilder result = new StringBuilder(); 
       boolean first = true; 

       for (NameValuePair pair : params) 
       { 
        if (first) 
         first = false; 
        else 
         result.append("&"); 

        result.append(URLEncoder.encode(pair.getName(), "UTF-8")); 
        result.append("="); 
        result.append(URLEncoder.encode(pair.getValue(), "UTF-8")); 
       } 

       return result.toString(); 
      } 
       protected void onPostExecute(String data) { 
       // do further things 
       Toast toast = Toast.makeText(getApplicationContext(), data, 
       Toast.LENGTH_SHORT); 
       toast.show(); 

       } 

      } 

      } 
0

一度のコードの行の下に使用:

try { 
     URL url = new URL("http://192.168.1.1"); 
     HttpURLConnection urlc = (HttpURLConnection) url.openConnection(); 
     urlc.setConnectTimeout(5 * 1000); 
     urlc.connect(); 
     if (urlc.getResponseCode() == 200) {  
     // condition for connection is fine , 200 = "OK" 
      return true; 
     } else { 
      return false; 
     } 
    } catch (MalformedURLException e1) { 
     return false; 
    } catch (IOException e) { 
     return false; 
    } 
関連する問題