2016-04-30 19 views
0

接続試行でタイムアウトを設定したい、たとえば10秒。しかし、私は本当にスレッドやWeb技術で何か良いです。私は次に何をすべきか分かりません。AsyncTask接続タイムアウト

これは私のクラスである:

class JSONAsyncTask extends AsyncTask<String, Void, Boolean> { 

    ProgressDialog dialog; 

    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 
     dialog = new ProgressDialog(RecipeActivity.this); 
     dialog.setMessage("Loading, please wait"); 
     dialog.setTitle("Connecting to server"); 
     dialog.show(); 
     dialog.setCancelable(false); 
    } 


    @Override 
    protected Boolean doInBackground(String... urls) { 
     try { 

      HttpGet httpPost = new HttpGet(urls[0]); 
      HttpClient httpClient = new DefaultHttpClient(); 
      HttpResponse response = httpClient.execute(httpPost); 


      int status = response.getStatusLine().getStatusCode(); 

      if (status == 200) { 
       HttpEntity entity = response.getEntity(); 
       String data = EntityUtils.toString(entity); 

       JSONArray array = new JSONArray(data); 

       for (int i = 0; i < array.length(); i++) { 
        JSONObject object = array.getJSONObject(i); 

        Recipe rec = new Recipe(); 
        rec.setName(object.getString("name")); 
        rec.setImage(object.getString("image")); 
        rec.setCalories(object.getInt("calories")); 
        rec.setIngredients(object.getString("ingredients")); 
        rec.setInstructions(object.getString("instructions")); 
        rec.setTime(object.getString("time")); 
        rec.setDescription(object.getString("description")); 
        rec.setNumberIngred(object.getString("numberingred")); 
        recipes.add(rec); 
       } 
       return true; 
      } 

     } catch (ParseException e1) { 
      e1.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 
     return false; 
    } 

    protected void onPostExecute(Boolean result) { 
     dialog.cancel(); 
     adapter.notifyDataSetChanged(); 
     if (result == false) 
      Toast.makeText(getApplicationContext(), "Unable to fetch data from server", Toast.LENGTH_LONG).show(); 

    } 
} 
+0

'HttpGet'という名前のオブジェクトを' httpPost'という名前で取得した面白い方法です! – Antrromet

答えて

3

私はSOに答えhereを見つけました。

ただし、AsyncTasksが困難な場合は、OkhttpまたはVolleyなどのライブラリを使用して簡単に行うことができます。