Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/217.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android:片段上的NullPointerException_Android - Fatal编程技术网

Android:片段上的NullPointerException

Android:片段上的NullPointerException,android,Android,我正在尝试访问活动中的一个片段 这是我的片段中的代码: package com.example.worldfriends; import java.util.ArrayList; import com.eclipsesource.json.JsonArray; import com.eclipsesource.json.JsonObject; import com.example.util.StaticValues; import android.app.Activity; import

我正在尝试访问活动中的一个片段

这是我的片段中的代码:

package com.example.worldfriends;

import java.util.ArrayList;

import com.eclipsesource.json.JsonArray;
import com.eclipsesource.json.JsonObject;
import com.example.util.StaticValues;

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.ListFragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.Toast;

public class FragmentMiddle extends ListFragment {

    private Button buttonJoin;
    private Button buttonLeave;
    private EditText etUsername;
    private EditText etGroup;
    //private ListView listView;

    protected GroupListAdapter adapter;

    private OnGroupListItemSelectedListener listenerList;
    private OnJoinClickListener listenerJoin;
    private OnLeaveClickListener listenerLeave;

    public static Fragment newInstance(Context context) {
        FragmentMiddle fragment = new FragmentMiddle();

        return fragment;
    }

    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);
        listenerList = (OnGroupListItemSelectedListener)activity;
        listenerJoin = (OnJoinClickListener)activity;
        listenerLeave = (OnLeaveClickListener)activity;
    }

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
        View view = inflater.inflate(R.layout.fragment_middle, container, false); 
        initComp(view);

        return view;
    }

    @Override
    public void onResume() {
        super.onResume();
        if(StaticValues.groupList != null) { // input thread is finised, update with values
            Log.d("Karl", "groupList not null");
            adapter = new GroupListAdapter(getActivity(), R.layout.group_row, StaticValues.groupList);
            setListAdapter(adapter);
        }
        Log.d("Karl", "FragmentMiddle: onResume() - END");
    }

    @Override
    public void onDetach() {
        super.onDetach();
        listenerList = null;
        listenerJoin = null;
        listenerLeave = null;
    }

    private void initComp(View view) {
        buttonJoin = (Button) view.findViewById(R.id.middle_button_join);
        buttonLeave = (Button) view.findViewById(R.id.middle_button_leave);
        buttonJoin.setOnClickListener(onClickListener);
        buttonLeave.setOnClickListener(onClickListener);

        etUsername = (EditText) view.findViewById(R.id.middle_input_username);
        etGroup = (EditText) view.findViewById(R.id.middle_input_group);
    }

    private OnClickListener onClickListener = new OnClickListener() {
        @Override
        public void onClick(final View v) {
            switch(v.getId()){
            case R.id.middle_button_join:
                listenerJoin.onJoinClickListener(etGroup.getText().toString(), etUsername.getText().toString());
                break;
            case R.id.middle_button_leave:
                listenerLeave.onLeaveClickListener(etGroup.getText().toString(), etUsername.getText().toString());
                break;
            }        
        }
    };

    @Override
    public void onListItemClick (ListView l, View v, int position, long id) {
        if(!etUsername.getText().toString().equals("")) {
            listenerList.onGroupListItemSelectedListener(StaticValues.groupList.get(position).name, etUsername.getText().toString());
        } else {
            Toast.makeText(getActivity(), "You must type in a username", Toast.LENGTH_LONG).show();
        }       
    }

    public interface OnGroupListItemSelectedListener {
        public void onGroupListItemSelectedListener(String group, String member);
    }

    public interface OnJoinClickListener {
        public void onJoinClickListener(String group, String member);
    }

    public interface OnLeaveClickListener {
        public void onLeaveClickListener(String group, String member);
    }

}
这是我的活动:

private void updateGroupList() {
    Log.d("Karl", "MainActivity: updateGroupList()");
    FragmentManager manager = getSupportFragmentManager();
    FragmentMiddle fragment = (FragmentMiddle) manager.findFragmentById(R.id.fragment_middle);
    fragment.adapter.notifyDataSetChanged();
我的问题是日志如下所示:

11-01 16:19:09.755: D/Karl(23054): FragmentMiddle: onResume() - END
11-01 16:19:10.974: D/Karl(23054): MainActivity: updateGroupList()  
它以正确的顺序运行,但是显然找不到“fragment”变量。我的fragment类是FragmentLeft类

有什么想法吗?我真的想不出会是什么

堆栈跟踪:

11-01 16:59:59.075: E/AndroidRuntime(30027): FATAL EXCEPTION: main
11-01 16:59:59.075: E/AndroidRuntime(30027): java.lang.NullPointerException
11-01 16:59:59.075: E/AndroidRuntime(30027):    at com.example.worldfriends.MainActivity.updateGroupList(MainActivity.java:508)
11-01 16:59:59.075: E/AndroidRuntime(30027):    at com.example.worldfriends.MainActivity.inputUnparsing(MainActivity.java:401)
11-01 16:59:59.075: E/AndroidRuntime(30027):    at com.example.worldfriends.InputThread$1.run(InputThread.java:28)
11-01 16:59:59.075: E/AndroidRuntime(30027):    at android.os.Handler.handleCallback(Handler.java:730)
11-01 16:59:59.075: E/AndroidRuntime(30027):    at android.os.Handler.dispatchMessage(Handler.java:92)
11-01 16:59:59.075: E/AndroidRuntime(30027):    at android.os.Looper.loop(Looper.java:137)
11-01 16:59:59.075: E/AndroidRuntime(30027):    at android.app.ActivityThread.main(ActivityThread.java:5103)
11-01 16:59:59.075: E/AndroidRuntime(30027):    at java.lang.reflect.Method.invokeNative(Native Method)
11-01 16:59:59.075: E/AndroidRuntime(30027):    at java.lang.reflect.Method.invoke(Method.java:525)
11-01 16:59:59.075: E/AndroidRuntime(30027):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
11-01 16:59:59.075: E/AndroidRuntime(30027):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
11-01 16:59:59.075: E/AndroidRuntime(30027):    at dalvik.system.NativeStart.main(Native Method)
11-01 17:00:01.020: I/Process(30027): Sending signal. PID: 30027 SIG: 9
第508行是这样的:

fragment.adapter.notifyDataSetChanged();
ViewPager代码:

package com.example.worldfriends;

import android.content.Context;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;

public class ViewPagerAdapter extends FragmentPagerAdapter {

    private Context context;
    private static int totalPage=3;
    private int currentItem=1;

    public ViewPagerAdapter(Context context, FragmentManager fm) {
        super(fm);
        this.context = context;
    }

    @Override
    public Fragment getItem(int position) {
        Fragment fragment = new Fragment();

        switch(position){
        case 0:
            fragment=FragmentLeft.newInstance(context);
            break;
        case 1:
            fragment=FragmentMiddle.newInstance(context);
            break;
        case 2:
            fragment=FragmentRight.newInstance(context);
            break;
        }
        return fragment;
    }

    @Override
    public int getCount() {
        return totalPage;
    }

    public int getCurrentItem() {
        return currentItem;
    }

}

尝试使用instanceOfFragment@UmerFarooq我试过了,收到一个语法错误@Umerfaroq我用更多的相关事实更新了这个问题,我收到了一个NullPointerException。我猜你的片段没有附加到任何活动,这就是为什么你的适配器为null并崩溃…至少从我看到的代码来看..或者你正在调用
notifySetDataChanged()
在创建适配器之前,请参阅前面的步骤。这完全取决于您在何处创建适配器,您能分享吗?