2016-05-15 1 views
0

私のアプリケーションでは、JSON形式のリモートサーバからデータを取得してリストに結果を表示するアクティビティがあります。しかし、サーバからデータが返されると、私の活動は特定のレスポンスでフリーズします。すなわちstatus_code = -1はjsonResult変数に格納されますが、サーバが他のステータスコードを返すときは正常に動作します。サーバーonPostExecuteメソッドの特定のJSONレスポンスでのアクティビティがフリーズする

{"user_data":[],"status_message":"ERROR","status_code":-1} 
{"user_data":[{"booked_slots":"1","slot_no":"2","place_name":"Centaurus","person_name":"faisal","slot_status":"Reserved","vehicle_no":"abc","startTime":"2","endTime":"3"}],"status_message":"OK","status_code":1} 

からの例2つの応答メッセージのため

たびSTATUS_CODE = -1活動が待ってさらに進行していないと言ってくださいラウンド待機ポインタでフリーズ返されます。

AsyncTaskコード:

private class AsyncDataClass extends AsyncTask<String, Void, String> { 

     @Override 

     protected String doInBackground(String... params) { 

      String responseBody = ""; 

      HttpParams httpParameters = new BasicHttpParams(); 
      HttpConnectionParams.setConnectionTimeout(httpParameters, 5000); 
      HttpConnectionParams.setSoTimeout(httpParameters, 5000); 
      HttpClient httpClient = new DefaultHttpClient(httpParameters); 
      HttpPost httpPost = new HttpPost(params[0]); 
      String jsonResult = ""; 
      try { 

       HttpResponse response = httpClient.execute(httpPost); 
       jsonResult = inputStreamToString(response.getEntity().getContent()).toString(); 
       System.out.println("Returned Json object " + jsonResult.toString()); 
      } catch (ClientProtocolException e) { 

       e.printStackTrace(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
      return jsonResult; 
     } 

     @Override 
     protected void onPreExecute() { 
      super.onPreExecute(); 
      pDialog = new ProgressDialog(ShowSlots.this); 
      pDialog.setMessage("Please wait..."); 
      pDialog.setCancelable(true); 
      pDialog.show(); 
     } 

     @Override 

     protected void onPostExecute(String result) { 

      super.onPostExecute(result); 
      System.out.println("Resulted Value: " + result); 
      if(result.equals("") || result == null){ 
       Toast.makeText(ShowSlots.this, "Server connection failed", Toast.LENGTH_LONG).show(); 
       return; 
      } 
      int jsonResult = returnParsedJsonObject(result); 
      if(jsonResult == -1){ 
       Toast.makeText(ShowSlots.this, "ALL Slots Are Available", Toast.LENGTH_LONG).show(); 
return; 
      } 
      if(jsonResult == 1){ 
       Toast.makeText(ShowSlots.this, "Got Parking Spots", Toast.LENGTH_LONG).show(); 
       try { 
        JSONObject jsonObj = new JSONObject(result); 
        // Getting JSON Array node 
        parkings = jsonObj.getJSONArray("user_data"); 
        // looping through All Contacts 
        for (int i = 0; i < parkings.length(); i++) { 
         JSONObject c = parkings.getJSONObject(i); 
         String slot = c.getString(TAG_SLOT); 
         serverReturn.add(slot); 
        } 

        rts= new ArrayList<slots>(); 
        String status=""; 
        int counter = 1; 
         for(int i=0;i<availableParkings;i++){ 

          for(int j = 0; j<serverReturn.size();j++){ 

           if(counter==Integer.parseInt(serverReturn.get(j))){ 
            status="Reserved"; 
            break; 
           } 
           else{ 
            status="Available"; 
           } 

          } 
          rts.add(new slots(parkingName, counter, status)); 
          counter++; 
         } 

        refreshDisplay(); 

       } catch (JSONException e) { 
        e.printStackTrace(); 
       } 


       if (pDialog.isShowing()) 
        pDialog.dismiss(); 


      } 

     } 

     private StringBuilder inputStreamToString(InputStream is) { 
      String rLine = ""; 
      StringBuilder answer = new StringBuilder(); 
      BufferedReader br = new BufferedReader(new InputStreamReader(is)); 
      try { 
       while ((rLine = br.readLine()) != null) { 
        answer.append(rLine); 
       } 
      } catch (IOException e) { 
// TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
      return answer; 
     } 
    } 

答えて

0

jsonResultが-1のとき、あなたはpDialog.dismiss()を呼び出すずにを返すようにonPostExecute()の原因とreturn文がありますダイアログを却下しなければ

if(jsonResult == -1){ 
    Toast.makeText(ShowSlots.this, "ALL Slots Are Available", Toast.LENGTH_LONG).show(); 
    return; 
} 

を、アプリケーションがまだ待っているかのように表示されます。 onPostExecute()が返される前に、あなたのコードを見直してダイアログが常に消されるようにする必要があります。

関連する問題