getActivity()片段上的NullPointerException



当前在Fragment中,我运行一个普通的Toast.makeText()命令。该命令在Volley操作中执行需要时间。在Toast实际出现的时间内,用户有时间返回到以前的Fragments。如果在这种情况下,用户返回到之前的Fragment,则发生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();
            }
        });

请帮忙。

在片段类中创建一个成员变量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);
}

这段代码不是一个好的解决方案,但它应该让您了解正在发生的事情。理想情况下,你应该有某种方法来集中你的祝酒词。例如,你可以在你的活动中注册一个广播接收器,并将你所有的祝酒词发送给它处理

希望能有所帮助。

这个简单的方法:

  1. 首先声明上下文变量:
    private Context context;
  2. onCreateView()中:
    context = container.getContext();
  3. 用于Toast:
    Toast.makeText(context, "Your vote was sent", Toast.LENGTH_LONG).show();

这是从容器中获取上下文作为ViewGroup,这样Toast就可以显示了

希望能有所帮助。

相关内容

最新更新