gpt4 book ai didi

java - 恢复应用程序后上下文为空

转载 作者:行者123 更新时间:2023-12-01 12:51:44 26 4
gpt4 key购买 nike

我遇到以下错误:

E/AndroidRuntime(658): FATAL EXCEPTION: main E/AndroidRuntime(658): java.lang.NullPointerException E/AndroidRuntime(658): at android.view.LayoutInflater.from(LayoutInflater.java:210) E/AndroidRuntime(658): at com.gauss.sportsapp.messages.RecievedRequestsAdapter.(RecievedRequestsAdapter.java:26) E/AndroidRuntime(658): at com.gauss.sportsapp.messages.MessagesList.setRecievedRequests(MessagesList.java:157) E/AndroidRuntime(658): at com.gauss.sportsapp.messages.MessagesList.onEventsAvailable(MessagesList.java:181) E/AndroidRuntime(658): at com.gauss.sportsapp.eventrequests.GetEventRequestsTask.onPostExecute(GetEventRequestsTask.java:74) E/AndroidRuntime(658): at com.gauss.sportsapp.eventrequests.GetEventRequestsTask.onPostExecute(GetEventRequestsTask.java:1) E/AndroidRuntime(658): at android.os.AsyncTask.finish(AsyncTask.java:602) E/AndroidRuntime(658): at android.os.AsyncTask.access$600(AsyncTask.java:156) E/AndroidRuntime(658): at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:615) E/AndroidRuntime(658): at android.os.Handler.dispatchMessage(Handler.java:99) E/AndroidRuntime(658): at android.os.Looper.loop(Looper.java:154) E/AndroidRuntime(658): at android.app.ActivityThread.main(ActivityThread.java:4945) E/AndroidRuntime(658): at java.lang.reflect.Method.invokeNative(Native Method) E/AndroidRuntime(658): at java.lang.reflect.Method.invoke(Method.java:511) E/AndroidRuntime(658): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) E/AndroidRuntime(658): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) E/AndroidRuntime(658): at dalvik.system.NativeStart.main(Native Method)

仅当我通过主页按钮退出应用程序并让它在后台运行一段时间后,才会发生该错误。如果我退出应用程序并立即再次启动它,就不会出现错误。有时,它甚至在我让它静置一段时间后起作用,但更常见的是,当我在适配器的构造函数中设置布局膨胀器时,它会返回上下文的空指针。

我的 fragment 的重要代码位:

public class MessagesList extends Fragment implements EventRequestListener { 

private ListView lv;
private GetEventRequestsTask recievedRequestsTask;
private List<GetEventRequest> data;
private RecievedRequestsAdapter adapter;

@Override
public void onActivityCreated(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onActivityCreated(savedInstanceState);
recievedRequestsTask = new GetEventRequestsTask(getActivity(), user_id);
recievedRequestsTask.setEventRequestListener(MessagesList.this);
recievedRequestsTask.execute();
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// TODO Auto-generated method stub
return inflater.inflate(R.layout.fragment_messages, container, false);
}

//Async Task listener, gets called if(result != null)
@Override
public void onEventsAvailable(List<GetEventRequest> result) {
// TODO Auto-generated method stub
adapter = new RecievedRequestsAdapter(getActivity(), data);
lv.setAdapter(adapter);
}

@Override
public void onStop() {
// TODO Auto-generated method stub
super.onStop();
if(recievedRequestsTask != null){
recievedRequestsTask.cancel(true);
}
}
}

适配器:

public class RecievedRequestsAdapter extends BaseAdapter {

private LayoutInflater inflater;
private List<GetEventRequest> list;

public RecievedRequestsAdapter(Context ctx, List<GetEventRequest> list){
this.list = list;
inflater = LayoutInflater.from(ctx); //This is where null pointer happens
}

@Override
public int getCount() {
// TODO Auto-generated method stub
return list.size();
}

@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return null;
}

@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return 0;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if(convertView == null){
holder = new ViewHolder();
convertView = inflater.inflate(R.layout.result_list_adapter, parent, false);
holder.txtTitle = (TextView) convertView.findViewById(R.id.txtTitle);
holder.txtDesc = (TextView) convertView.findViewById(R.id.txtDescription);

convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}

//Do stuff, set views, etc

return convertView;
}

private static final class ViewHolder{
public TextView txtTitle, txtDesc;
}
}

有人有什么想法吗?测试或调试这一点非常困难,因为它发生得非常随机,并且只有在应用程序长时间闲置在后台之后才会发生。

最佳答案

如果 fragment 未附加到 Activity ,则 fragment 的 getActivity() 返回 null

您的异步任务监听器onEventsAvailable()未绑定(bind)到 fragment 生命周期,并且当 fragment 分离时它也可以触发。

考虑重新设计您的代码,以便未显示的 fragment 不需要自行更新。

关于java - 恢复应用程序后上下文为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24179400/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com