2013-11-28 98 views
1

當前在Fragment我運行一個正常的Toast.makeText()命令。該命令需要時間執行,因爲它在Volley操作中。在Toast確實出現的時間內,用戶有時間回到之前的Fragment s。如果在這種情況下用戶返回到之前的Fragment,則發生NullPointerExceptiongetActivity()的NullPointerException異常片段

11-28 13:53:53.965: E/AndroidRuntime(22654): FATAL EXCEPTION: main 
11-28 13:53:53.965: E/AndroidRuntime(22654): Process: com.developmentcheck.dcforpublic, PID: 22654 
11-28 13:53:53.965: E/AndroidRuntime(22654): java.lang.NullPointerException 
11-28 13:53:53.965: E/AndroidRuntime(22654): at android.widget.Toast.<init>(Toast.java:93) 
11-28 13:53:53.965: E/AndroidRuntime(22654): at android.widget.Toast.makeText(Toast.java:241) 

代碼:

Toast.makeText(
     getSherlockActivity(), 
     "Sorry something went wrong. Please update again.", 
     Toast.LENGTH_LONG).show(); 

它在使用下面的方法(這就是所謂的onActivityCreated):

public void castVote(final String id, int vote_state, 
     final String situations) throws JSONException { 

JsonObjectRequest jsrq = new JsonObjectRequest(Request.Method.POST, 
     url, json, new Response.Listener<JSONObject>() { 

      @Override 
      public void onResponse(JSONObject response) { 
       // TODO Auto-generated method stub 
       Log.i("JSON_RESPONSE_VOTE", response.toString()); 
       Toast.makeText(getSherlockActivity(), "Your vote was sent", 
         Toast.LENGTH_LONG).show(); 
      } 
     }, new Response.ErrorListener() { 

      @Override 
      public void onErrorResponse(VolleyError error) { 
       // TODO Auto-generated method stub 
       Toast.makeText(
         getSherlockActivity(), 
         "Sorry something went wrong. Please update again.", 
         Toast.LENGTH_LONG).show(); 

      } 
     }); 

請幫助。

+0

唯一的原因是getSherlockActivity返回null。 – Blackbelt

+0

何時何地稱呼「吐司」? –

+0

這怎麼解決?我也嘗試過使用getActivity()。 @blackbelt –

回答

3

在你的片段類中創建一個成員變量mPendingToastText。那就試試這個:

@Override 
public void onErrorResponse(VolleyError error) { 
    // TODO Auto-generated method stub 
    if (getSherlockActivity() != null) { 
     Toast.makeText(
      getSherlockActivity(), 
      "Sorry something went wrong. Please update again.", 
      Toast.LENGTH_LONG).show(); 
    } else { 
     mPendingToastText = "Sorry something went wrong. Please update again."; 
    } 

} 

現在重寫onAttach()事件的片段是這樣的:

@Override 
public void onAttach(Activity activity) { 
    if (!TextUtils.isEmpty(mPendingToastText) { 
       Toast.makeText(
        activity, 
        mPendingToastText, 
        Toast.LENGTH_LONG).show(); 
       mPendingToastText = ""; 
    } 
    super.onAttach(activity); 
} 

此代碼是不是一個很好的解決方案,但它應該給你發生了什麼事的想法。理想情況下,你應該有一種集中你的敬酒的方法。例如,你可以在你的活動中註冊一個廣播接收器,併發送你的所有Toast來處理它。

希望它有幫助。

+0

而不是使用'getActivity()'或'getSherlockActivity()'...我在'onAttach() '聲明...'this.activity = activity;'...所以在調用Toast的時候...我聲明瞭'Toast.makeText(activity,...)',它可以工作。你可以把它作爲一個編輯...我將刪除評論...並感謝:)這個想法來自你。 –

+0

好!我很高興它爲你工作。我想你可以在那裏留下你的評論。這是一個不錯的主意,可以按照你所說的去做,但要記得在onDetach()上設置'this.activity = null'以避免其他異常。 :) –

1

這種簡單的方法:

  1. 首先要聲明上下文變量:
    private Context context;
  2. onCreateView()
    context = container.getContext();
  3. 使用它吐司:
    Toast.makeText(context, "Your vote was sent", Toast.LENGTH_LONG).show();

這是獲取上下文容器作爲ViewGroup,因此可以顯示Toast。

希望它有幫助。

相關問題