2016-08-24 2 views
1

У меня есть активность, в которой добавляются две вкладки, а именно frag1 и frag2. В frag1 я отправляю запрос сервера, и пользователю отображается диалог выполнения, но появляется ошибка в диалоговом окне «Отклонение». Как я могу решить эту проблему.Как вызвать диалог прогресса в фрагменте?

код ошибки: -

java.lang.IllegalArgumentException: View=com.android.internal.policy.impl.PhoneWindow$DecorView{4274d0d8 V.E..... R......D 0,0-456,144} not attached to window manager 

Frag1 код Диалог: -

private void postDealListingDatatoServer() { 
    try { 
     String json; 
     // 3. build jsonObject 
     final JSONObject jsonObject = new JSONObject();// making object of Jsons. 
     jsonObject.put("agentCode", m_szMobileNumber);// put mobile number 
     jsonObject.put("pin", m_szEncryptedPassword);// put password 


     Log.e(TAG, "Intial Record Count::" + sz_RecordCount); 
     Log.e(TAG, "Intial Last Count::" + sz_LastCount); 
     // 4. convert JSONObject to JSON to String 
     json = jsonObject.toString();// convert Json object to string 

     Log.i(TAG, "Server Request:-" + json); 

     m_Dialog = DialogUtils.showProgressDialog(getActivity(), "Loading..."); 

     final String m_DealListingURL = "http://202.131.144.132:8080//getDealListInJSON"; 
     JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.POST, m_DealListingURL, jsonObject, new Response.Listener<JSONObject>() { 
      @Override 
      public void onResponse(JSONObject response) { 
       Log.i(TAG, "Server Response:-" + response); 
       if (m_Dialog != null && m_Dialog.isShowing()) { 
        m_Dialog.dismiss(); 
       } 
       try { 
        int nResultCodeFromServer = Integer.parseInt(response.getString("resultcode")); 
        if (nResultCodeFromServer == m_TRANSACTION_SUCCESSFUL) { 
         JSONArray posts = response.optJSONArray("dealList");// get Deal list in array from response 
         s_oDataset.clear(); 
         for (int i = 0; i < posts.length(); i++) {// loop for counting deals from server 
          JSONObject post = posts.getJSONObject(i);// counting deal based on index 
          item = new CDealAppDatastorage();// creating object of DealAppdata storage 
          item.setM_szHeaderText(post.getString("dealname"));// get deal name from response 
          item.setM_szsubHeaderText(post.getString("dealcode"));// get dealcode from response 
          item.setM_szDealValue(post.getString("dealvalue"));// get deal value from response 
          item.setM_n_Image(m_n_FormImage[i]);//set Image Index wise(Dummy) 
          s_oDataset.add(item);// add all items in ArrayList 

         } 
         if (!s_oDataset.isEmpty()) {// condition if data in arraylist is not empty 
          m_oAdapter = new CDealAppListingAdapter(getActivity(), s_oDataset);// create adapter object and add arraylist to adapter 
          m_ListView.setAdapter(m_oAdapter);//adding adapter to recyclerview 
          m_NoInternetWarning.setVisibility(View.GONE); 
          mSwipeRefresh.setVisibility(View.VISIBLE); 

         } else { 
          m_ListView.removeFooterView(mFooter);// else Load buttonvisibility set to Gone 
         } 
        } 
        if (nResultCodeFromServer == m_kCONNECTION_LOST) {//server based conditions 
         CSnackBar.getInstance().showSnackBarError(m_Main.findViewById(R.id.mainLayout), "Connection Lost !", getActivity()); 
        } else if (nResultCodeFromServer == m_kDEAL_NOT_FOUND) {// serevr based conditions ..... 
         CSnackBar.getInstance().showSnackBarError(m_Main.findViewById(R.id.mainLayout), "No more deals available", getActivity()); 
        } else if (nResultCodeFromServer == m_kTECHNICAL_FAILURE) { 
         CSnackBar.getInstance().showSnackBarError(m_Main.findViewById(R.id.mainLayout), "Technical Failure", getActivity()); 
        } else if (nResultCodeFromServer == m_kTIMED_OUT) { 
         CSnackBar.getInstance().showSnackBarError(m_Main.findViewById(R.id.mainLayout), "Timed Out", getActivity()); 
        } else if (nResultCodeFromServer == m_kUNKNOWN_ERROR) { 
         CSnackBar.getInstance().showSnackBarError(m_Main.findViewById(R.id.mainLayout), "Unknown Error", getActivity()); 
        } else if (nResultCodeFromServer == m_kALREADY_AVAIL_BENEFIT) { 
         CSnackBar.getInstance().showSnackBarError(m_Main.findViewById(R.id.mainLayout), "You have already avail the benefit of this deal", getActivity()); 
        } 

       } catch (JSONException e) { 
        e.printStackTrace(); 
       } 
      } 
     }, new Response.ErrorListener() { 
      @Override 
      public void onErrorResponse(VolleyError error) { 
       Log.e(TAG, "Server error:-" + error); 
       if (m_Dialog != null && m_Dialog.isShowing()) { 
        m_Dialog.dismiss(); 
       } 
       if (error instanceof TimeoutError) { 
        CSnackBar.getInstance().showSnackBarError(m_Main.findViewById(R.id.mainLayout), "Connection lost ! Please try again", getActivity()); 
        mSwipeRefresh.setVisibility(View.GONE); 
        m_NoInternetWarning.setVisibility(View.VISIBLE); 
       } else if (error instanceof NetworkError) { 
        CSnackBar.getInstance().showSnackBarError(m_Main.findViewById(R.id.mainLayout), "No internet connection", getActivity()); 
        mSwipeRefresh.setVisibility(View.GONE); 
        m_NoInternetWarning.setVisibility(View.VISIBLE); 
       } 
      } 
     }); 
     RequestQueue requestQueue = Volley.newRequestQueue(getActivity()); 
     requestQueue.add(jsonObjectRequest); 
    } catch (JSONException e) { 
     e.printStackTrace(); 
    } 

} 

здесь я получаю ошибку, отклонив диалог.

DialogUtils код класса: -

public class DialogUtils { 

public static ProgressDialog showProgressDialog(Context context, String message) { 
    ProgressDialog m_Dialog = new ProgressDialog(context); 
    m_Dialog.setMessage(message); 
    m_Dialog.setProgressStyle(ProgressDialog.STYLE_SPINNER); 
    m_Dialog.setCancelable(false); 
    m_Dialog.show(); 
    return m_Dialog; 

} 

} 
+0

Вы пытались отпустить диалог прогресса с помощью 'runOnUiThread()'? –

ответ

0

На DialogUtils класс изменить первый параметр контекст для деятельности

public class DialogUtils { 

    public static ProgressDialog showProgressDialog(Activity activity, String message) { 
    ProgressDialog m_Dialog = new ProgressDialog(activity); 
    m_Dialog.setMessage(message); 
    m_Dialog.setProgressStyle(ProgressDialog.STYLE_SPINNER); 
    m_Dialog.setCancelable(false); 
    m_Dialog.show(); 
    return m_Dialog; 

    } 

} 

// вызов в фрагменте как

final ProgressDialog dialog=DialogUtils.showProgressDialog(getActivity(),"Loading..."); 

, если вы хотите, чтобы закрыть то просто

dialog.dismiss(); 

// по методу паузы

@Override 
public void onPause() { 
    super.onPause(); 

    if ((mDialog != null) && mDialog.isShowing()) 
     mDialog.dismiss(); 
    mDialog = null; 
} 
+0

и что делать в Фрагменте – Raj

+0

Диалог ProgressDialog = DialogUtils.showProgressDialog (FragmentClass.this, "Загрузка ..."); – shahid17june

+0

Почему изменение из контекста в действие объясняет коротким – Raj

Смежные вопросы