Java 使片段动态后,arrayadapter中的Nullpointerexception
我想让我的片段动态化,这样我就可以替换片段以达到刷新的目的。 但现在我做到了,我在应用程序中得到了nullpointerexception 以下是错误:Java 使片段动态后,arrayadapter中的Nullpointerexception,java,android,facebook,android-fragments,Java,Android,Facebook,Android Fragments,我想让我的片段动态化,这样我就可以替换片段以达到刷新的目的。 但现在我做到了,我在应用程序中得到了nullpointerexception 以下是错误: 11-24 13:00:27.429: E/AndroidRuntime(31304): FATAL EXCEPTION: main 11-24 13:00:27.429: E/AndroidRuntime(31304): java.lang.NullPointerException 11-24 13:00:27.429: E/
11-24 13:00:27.429: E/AndroidRuntime(31304): FATAL EXCEPTION: main
11-24 13:00:27.429: E/AndroidRuntime(31304): java.lang.NullPointerException
11-24 13:00:27.429: E/AndroidRuntime(31304): at android.widget.ArrayAdapter.init(ArrayAdapter.java:310)
11-24 13:00:27.429: E/AndroidRuntime(31304): at android.widget.ArrayAdapter.<init>(ArrayAdapter.java:153)
11-24 13:00:27.429: E/AndroidRuntime(31304): at com.laurenswuyts.witpa.ListEventAdapter.<init>(ListEventAdapter.java:23)
11-24 13:00:27.429: E/AndroidRuntime(31304): at com.laurenswuyts.witpa.EventFragment.parseEventFromFQLResponse(EventFragment.java:154)
11-24 13:00:27.429: E/AndroidRuntime(31304): at com.laurenswuyts.witpa.EventFragment$2.onCompleted(EventFragment.java:119)
11-24 13:00:27.429: E/AndroidRuntime(31304): at com.facebook.Request$4.run(Request.java:1669)
11-24 13:00:27.429: E/AndroidRuntime(31304): at android.os.Handler.handleCallback(Handler.java:615)
11-24 13:00:27.429: E/AndroidRuntime(31304): at android.os.Handler.dispatchMessage(Handler.java:92)
11-24 13:00:27.429: E/AndroidRuntime(31304): at android.os.Looper.loop(Looper.java:137)
11-24 13:00:27.429: E/AndroidRuntime(31304): at android.app.ActivityThread.main(ActivityThread.java:4944)
11-24 13:00:27.429: E/AndroidRuntime(31304): at java.lang.reflect.Method.invokeNative(Native Method)
11-24 13:00:27.429: E/AndroidRuntime(31304): at java.lang.reflect.Method.invoke(Method.java:511)
11-24 13:00:27.429: E/AndroidRuntime(31304): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1038)
11-24 13:00:27.429: E/AndroidRuntime(31304): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:805)
11-24 13:00:27.429: E/AndroidRuntime(31304): at dalvik.system.NativeStart.main(Native Method)
片段计数器在my main.xml中
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/fragment_container"
android:layout_width="match_parent"
android:layout_height="match_parent" />
这是我的事件片段:
public class EventFragment extends Fragment {
//Arraylist with event details
private static List<EventDetails> dataEvent;
//Adapter to put event details in listview
ListEventAdapter eventAdapter;
//Listview with the events
ListView lvEvents;
//To show Progress Circle
LinearLayout linearProgress;
private static final String TAG = "EventFragment";
private static final int REAUTH_ACTIVITY_CODE = 100;
@Override
public View onCreateView(LayoutInflater inflater,
ViewGroup container, Bundle savedInstanceState) {
super.onCreateView(inflater, container, savedInstanceState);
View view = inflater.inflate(R.layout.event,
container, false);
linearProgress = (LinearLayout) view.findViewById(R.id.linProgress);
lvEvents = (ListView) view.findViewById(R.id.lvEvent);
// Check for an open session
Session session = Session.getActiveSession();
if (session != null && session.isOpened()) {
// Get the user's data
ShowEventsFromFQL();
}
return view;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
uiHelper = new UiLifecycleHelper(getActivity(), callback);
uiHelper.onCreate(savedInstanceState);
}
public void ShowEventsFromFQL(){
// Check for an open session
Session session = Session.getActiveSession();
if (session != null && session.isOpened()) {
//Progressbar active
linearProgress.setVisibility(View.VISIBLE);
// Get the user's data
// ORDER BY attending_count DESC
String fqlQuery = ".....";
Bundle params = new Bundle();
params.putString("q", fqlQuery);
Session session2 = Session.getActiveSession();
Request request = new Request(session2,
"/fql",
params,
HttpMethod.GET,
new Request.Callback(){
public void onCompleted(Response response) {
Log.i(TAG, "Result: " + response.toString());
parseEventFromFQLResponse(response);
}
});
Request.executeBatchAsync(request);
}
}
public final void parseEventFromFQLResponse( Response response )
{
dataEvent = new ArrayList<EventDetails>();
try
{
GraphObject graphObj = response.getGraphObject();
JSONObject jsonObj = graphObj.getInnerJSONObject();
JSONArray jsonArr = jsonObj.getJSONArray( "data" );
for ( int i = 0; i < ( jsonArr.length() ); i++ )
{
JSONObject jObject = jsonArr.getJSONObject( i );
int attending_count = jObject.getInt("attending_count");
String name = jObject.getString("name");
String host = jObject.getString("host");
String description = jObject.getString("description");
String location = jObject.getString("location");
String start_time = jObject.getString("start_time");
String end_time = jObject.getString("end_time");
dataEvent.add(new EventDetails(attending_count, name, host, description, location, start_time, end_time));
}
// if(dataEvent != null){
eventAdapter = new ListEventAdapter(getActivity(), R.layout.event_item, dataEvent);
lvEvents.setAdapter(eventAdapter);
eventAdapter.notifyDataSetChanged();
//Progressbar gone
linearProgress.setVisibility(View.GONE);
// }
}
catch (JSONException e) {
e.printStackTrace();
}
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REAUTH_ACTIVITY_CODE) {
uiHelper.onActivityResult(requestCode, resultCode, data);
}
}
private void onSessionStateChange(final Session session, SessionState state, Exception exception) {
if (session != null && session.isOpened()) {
// Get the user's data.
ShowEventsFromFQL();
}
}
private UiLifecycleHelper uiHelper;
private Session.StatusCallback callback = new Session.StatusCallback() {
@Override
public void call(final Session session, final SessionState state, final Exception exception) {
onSessionStateChange(session, state, exception);
}
};
@Override
public void onResume() {
super.onResume();
uiHelper.onResume();
}
@Override
public void onSaveInstanceState(Bundle bundle) {
super.onSaveInstanceState(bundle);
uiHelper.onSaveInstanceState(bundle);
}
@Override
public void onPause() {
super.onPause();
uiHelper.onPause();
}
@Override
public void onDestroy() {
super.onDestroy();
uiHelper.onDestroy();
}
}
public类EventFragment扩展了片段{
//带有事件详细信息的Arraylist
私有静态列表数据事件;
//将事件详细信息放入listview的适配器
ListEventAdapter事件适配器;
//包含事件的Listview
列表视图;
//显示进度循环
线性布局线性进度;
私有静态最终字符串TAG=“EventFragment”;
私有静态最终内部授权活动代码=100;
@凌驾
创建视图上的公共视图(更平坦的充气机,
视图组容器,捆绑包savedInstanceState){
super.onCreateView(充气机、容器、保存状态);
视图=充气机。充气(R.layout.event,
货柜(虚假);;
linearProgress=(LinearLayout)view.findviewbyd(R.id.linProgress);
lvEvents=(ListView)view.findViewById(R.id.lvEvent);
//检查是否有开放会话
Session=Session.getActiveSession();
if(session!=null&&session.isOpened()){
//获取用户的数据
ShowEventsFromFQL();
}
返回视图;
}
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
uiHelper=newUILifecycleHelper(getActivity(),回调);
uiHelper.onCreate(savedInstanceState);
}
public void ShowEventsFromFQL(){
//检查是否有开放会话
Session=Session.getActiveSession();
if(session!=null&&session.isOpened()){
//Progressbar活动
linearProgress.setVisibility(视图可见);
//获取用户的数据
//按出席人数订购
字符串fqlQuery=“…”;
Bundle params=新Bundle();
参数putString(“q”,fqlQuery);
会话session2=Session.getActiveSession();
请求=新请求(会话2,
“/fql”,
params,
HttpMethod.GET,
新建请求。回调(){
未完成公共无效(响应){
Log.i(标记“Result:+response.toString());
parseEventFromFQLResponse(响应);
}
});
Request.executeBatchAsync(请求);
}
}
公共最终无效ParseEventFromFQLRResponse(响应)
{
dataEvent=新的ArrayList();
尝试
{
GraphObject graphObj=response.getGraphObject();
JSONObject jsonObj=graphObj.getInnerJSONObject();
JSONArray jsonArr=jsonObj.getJSONArray(“数据”);
对于(int i=0;i<(jsonArr.length());i++)
{
JSONObject jObject=jsonArr.getJSONObject(i);
int attenting_count=jObject.getInt(“attenting_count”);
字符串名称=jObject.getString(“名称”);
stringhost=jObject.getString(“主机”);
String description=jObject.getString(“description”);
字符串位置=jObject.getString(“位置”);
String start_time=jObject.getString(“start_time”);
String end_time=jObject.getString(“end_time”);
添加(新事件详细信息(出席人数、姓名、主机、描述、位置、开始时间、结束时间));
}
//if(dataEvent!=null){
eventAdapter=new ListEventAdapter(getActivity(),R.layout.event_项,dataEvent);
lvEvents.setAdapter(eventAdapter);
eventAdapter.notifyDataSetChanged();
//Progressbar消失了
linearProgress.setVisibility(View.GONE);
// }
}
捕获(JSONException e){
e、 printStackTrace();
}
}
@凌驾
ActivityResult上的公共void(int请求代码、int结果代码、意图数据){
super.onActivityResult(请求代码、结果代码、数据);
if(请求代码==重新授权活动代码){
onActivityResult(请求代码、结果代码、数据);
}
}
private void OnSessionState更改(最终会话、会话状态、异常){
if(session!=null&&session.isOpened()){
//获取用户的数据。
ShowEventsFromFQL();
}
}
私人UiLifecycleHelper uiHelper;
private Session.StatusCallback callback=新建会话.StatusCallback(){
@凌驾
公共无效调用(最终会话、最终会话状态、最终异常){
onSessionStateChange(会话、状态、异常);
}
};
@凌驾
恢复时公开作废(){
super.onResume();
uiHelper.onResume();
}
@凌驾
SaveInstanceState上的公共无效(捆绑){
super.onSaveInstanceState(bundle);
uiHelper.onSaveInstanceState(bundle);
}
@凌驾
公共无效暂停(){
super.onPause();
uiHelper.onPause();
}
@凌驾
公共空间{
super.ondestory();
uiHelper.ondestory();
}
}
以下是我的EventFragment布局:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<LinearLayout
android:id="@+id/linProgress"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="center"
android:orientation="vertical"
android:visibility="gone" >
<ProgressBar
android:id="@+id/spinnerProgressBar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center">
</ProgressBar>
</LinearLayout>
<ListView
android:id="@+id/lvEvent"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:divider="@null"
android:dividerHeight="0dp"/>
</RelativeLayout>
这是我的适配器:
public class ListEventAdapter extends ArrayAdapter<EventDetails> {
public ListEventAdapter(Context context, int textViewResourceId) {
super(context, textViewResourceId);
// TODO Auto-generated constructor stub
}
private List<EventDetails> eItems;
public ListEventAdapter(Context context, int resource, List<EventDetails> eItems) {
super(context, resource, eItems);
this.eItems = eItems;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v = convertView;
TextView txtAttending_count = null;
TextView txtName = null;
if (v == null) {
LayoutInflater vi;
vi = LayoutInflater.from(getContext());
v = vi.inflate(R.layout.event_item, null);
}
txtAttending_count = (TextView) v.findViewById(R.id.attending_count);
txtName = (TextView) v.findViewById(R.id.name);
EventDetails p = eItems.get(position);
if (p != null) {
if (txtAttending_count != null) {
txtAttending_count.setText(""+p.getAttending_count());
}
if (txtName != null) {
txtName.setText(""+p.getName());
}
}
return v;
}
}
公共类ListEventAdapter扩展了ArrayAdapter{
公共ListEventAdapter(上下文,int textViewResourceId){
超级(上下文,textViewResourceId)
public class ListEventAdapter extends ArrayAdapter<EventDetails> {
public ListEventAdapter(Context context, int textViewResourceId) {
super(context, textViewResourceId);
// TODO Auto-generated constructor stub
}
private List<EventDetails> eItems;
public ListEventAdapter(Context context, int resource, List<EventDetails> eItems) {
super(context, resource, eItems);
this.eItems = eItems;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v = convertView;
TextView txtAttending_count = null;
TextView txtName = null;
if (v == null) {
LayoutInflater vi;
vi = LayoutInflater.from(getContext());
v = vi.inflate(R.layout.event_item, null);
}
txtAttending_count = (TextView) v.findViewById(R.id.attending_count);
txtName = (TextView) v.findViewById(R.id.name);
EventDetails p = eItems.get(position);
if (p != null) {
if (txtAttending_count != null) {
txtAttending_count.setText(""+p.getAttending_count());
}
if (txtName != null) {
txtName.setText(""+p.getName());
}
}
return v;
}
}
LoginFragment f = LoginFragment.newInstance(strings);
public LoginFragment() {
private final String KEY = "KEY";
private ArrayList<String> mStrings;
static public LoginFragment newInstance(ArrayList<String> strings) {
Bundle b= new Bundle();
b.putStringArrayList(KEY, strings)
}
void onCreate(Bundle b) {
mStrings = getArguments().getStringArrayList(KEY);
}
}