当前在Fragment
中,我运行一个普通的Toast.makeText()
命令。该命令在Volley
操作中执行需要时间。在Toast
实际出现的时间内,用户有时间返回到以前的Fragment
s。如果在这种情况下,用户返回到之前的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);
}
这段代码不是一个好的解决方案,但它应该让您了解正在发生的事情。理想情况下,你应该有某种方法来集中你的祝酒词。例如,你可以在你的活动中注册一个广播接收器,并将你所有的祝酒词发送给它处理
希望能有所帮助。
这个简单的方法:
- 首先声明上下文变量:
private Context context;
- 在
onCreateView()
中:context = container.getContext();
- 用于Toast:
Toast.makeText(context, "Your vote was sent", Toast.LENGTH_LONG).show();
这是从容器中获取上下文作为ViewGroup,这样Toast就可以显示了
希望能有所帮助。