Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/221.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
Java 使用片段-NullPointerException_Java_Android_Android Activity_Android Fragments_Parse Platform - Fatal编程技术网

Java 使用片段-NullPointerException

Java 使用片段-NullPointerException,java,android,android-activity,android-fragments,parse-platform,Java,Android,Android Activity,Android Fragments,Parse Platform,我在包含各种片段的活动上收到了一个空指针异常错误。在该活动中,用户列表将通过基于性别、最低年龄等各种标准的解析填充到当前用户 下面是启动应用程序时意外收到的logcat消息 08-15 17:42:28.863: E/AndroidRuntime(4974): FATAL EXCEPTION: main 08-15 17:42:28.863: E/AndroidRuntime(4974): Process: com.dooba.beta, PID: 4974 08-15 17:42:28.863

我在包含各种片段的活动上收到了一个空指针异常错误。在该活动中,用户列表将通过基于性别、最低年龄等各种标准的解析填充到当前用户

下面是启动应用程序时意外收到的logcat消息

08-15 17:42:28.863: E/AndroidRuntime(4974): FATAL EXCEPTION: main
08-15 17:42:28.863: E/AndroidRuntime(4974): Process: com.dooba.beta, PID: 4974
08-15 17:42:28.863: E/AndroidRuntime(4974): java.lang.NullPointerException
08-15 17:42:28.863: E/AndroidRuntime(4974):     at com.dooba.beta.Fragment1$1.done(Fragment1.java:108)
08-15 17:42:28.863: E/AndroidRuntime(4974):     at com.parse.FindCallback.internalDone(FindCallback.java:45)
08-15 17:42:28.863: E/AndroidRuntime(4974):     at com.parse.FindCallback.internalDone(FindCallback.java:1)
08-15 17:42:28.863: E/AndroidRuntime(4974):     at com.parse.Parse$6$1.run(Parse.java:888)
08-15 17:42:28.863: E/AndroidRuntime(4974):     at android.os.Handler.handleCallback(Handler.java:733)
08-15 17:42:28.863: E/AndroidRuntime(4974):     at android.os.Handler.dispatchMessage(Handler.java:95)
08-15 17:42:28.863: E/AndroidRuntime(4974):     at android.os.Looper.loop(Looper.java:136)
08-15 17:42:28.863: E/AndroidRuntime(4974):     at android.app.ActivityThread.main(ActivityThread.java:5017)
08-15 17:42:28.863: E/AndroidRuntime(4974):     at java.lang.reflect.Method.invokeNative(Native Method)
08-15 17:42:28.863: E/AndroidRuntime(4974):     at java.lang.reflect.Method.invoke(Method.java:515)
08-15 17:42:28.863: E/AndroidRuntime(4974):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
08-15 17:42:28.863: E/AndroidRuntime(4974):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
08-15 17:42:28.863: E/AndroidRuntime(4974):     at dalvik.system.NativeStart.main(Native Method)
下面是保存发生错误的片段的活动代码

 public class usermatch extends FragmentActivity {
        private PageAdapter mPagerAdapter;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.viewpager_layout);
            initialisePaging();

        }

        private void initialisePaging() {
            // TODO Auto-generated method stub
            List<Fragment> fragments = new Vector<Fragment>();
            fragments.add(Fragment.instantiate(this, Fragment1.class.getName()));
            fragments.add(Fragment.instantiate(this, Fragment2.class.getName()));
            fragments.add(Fragment.instantiate(this, Fragment3.class.getName()));
            mPagerAdapter = new PageAdapter(this.getSupportFragmentManager(), fragments);
            ViewPager pager = (ViewPager) findViewById(R.id.viewpager);
            pager.setAdapter(mPagerAdapter);

        }

        @Override
        public boolean onCreateOptionsMenu(Menu menu) {

            // Inflate the menu; this adds items to the action bar if it is present.
            getMenuInflater().inflate(R.menu.mood, menu);
            return true;
        }

        @Override
        public boolean onOptionsItemSelected(MenuItem item) {
            // Handle action bar item clicks here. The action bar will
            // automatically handle clicks on the Home/Up button, so long
            // as you specify a parent activity in AndroidManifest.xml.
            int id = item.getItemId();
            if (id == R.id.action_settings) {
                return true;
            }
            return super.onOptionsItemSelected(item);
        }
    }
第108行

        usersListView.setAdapter(namesArrayAdapter);
更新的活动代码

public class Fragment1 extends Fragment {

    private String currentUserId;
    private ArrayAdapter<String> namesArrayAdapter;
    private ArrayList<String> names;
    private ListView usersListView;
    private Button logoutButton;
    String userGender = ParseUser.getCurrentUser().getString("Gender");
    String activityName = ParseUser.getCurrentUser().getString("ActivityName");
    Number maxDistance = ParseUser.getCurrentUser().getNumber("Maximum_Distance");
    String userLookingGender = ParseUser.getCurrentUser().getString("Looking_Gender");
    Number minimumAge = ParseUser.getCurrentUser().getNumber("Minimum_Age");
    Number maximumAge = ParseUser.getCurrentUser().getNumber("Maximum_Age");
    Number userage = ParseUser.getCurrentUser().getNumber("Age");

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

        setConversationsList();

    }

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


        return view;
    }

private void setConversationsList() {
    currentUserId = ParseUser.getCurrentUser().getObjectId();
    names = new ArrayList<String>();
    // String userActivitySelectionName = null;

    ParseQuery<ParseUser> query = ParseUser.getQuery();

    //  query.whereEqualTo("ActivityName",userActivitySelectionName);

    query.whereNotEqualTo("objectId", ParseUser.getCurrentUser().getObjectId());
    // users with Gender = currentUser.Looking_Gender
    query.whereEqualTo("Gender", userLookingGender);
    // users with Looking_Gender = currentUser.Gender
    query.whereEqualTo("Looking_Gender", userGender);
    query.setLimit(1);
    query.whereEqualTo("ActivityName", activityName);
    query.whereGreaterThanOrEqualTo("Minimum_Age", minimumAge).whereGreaterThanOrEqualTo("Age", userage);
    query.whereLessThanOrEqualTo("Maximum_Age", maximumAge).whereLessThanOrEqualTo("Age", userage);
    //  query.whereWithinKilometers("Maximum_Distance", point, maxDistance)





    query.findInBackground(new FindCallback<ParseUser>() {

        public void done(List<ParseUser> userList, ParseException e) {
            if (e == null) {
                for (int i=0; i<userList.size(); i++) {
                    names.add(userList.get(i).get("Name").toString());
                    names.add(userList.get(i).get("Headline").toString());
                    names.add(userList.get(i).get("Age").toString());

                    //       names.add(userList.get(i).getParseObject("ProfilePicture").;


                }




                usersListView = (ListView)getActivity().findViewById(R.id.usersListView);
                namesArrayAdapter =
                        new ArrayAdapter<String>(getActivity().getApplicationContext(),
                                R.layout.user_list_item, names);
                usersListView.setAdapter(namesArrayAdapter);

                usersListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                    @Override
                    public void onItemClick(AdapterView<?> a, View v, int i, long l) {
                        openConversation(names, i);
                    }
                });

            } else {
                Toast.makeText(getActivity().getApplicationContext(),
                        "Error loading user list",
                        Toast.LENGTH_LONG).show();
            }
        }
    });
}

public void openConversation(ArrayList<String> names, int pos) {
    ParseQuery<ParseUser> query = ParseUser.getQuery();
    query.whereEqualTo("Name", names.get(pos));
    query.findInBackground(new FindCallback<ParseUser>() {
        public void done(List<ParseUser> user, ParseException e) {
            if (e == null) {
                Intent intent = new Intent(getActivity().getApplicationContext(), MessagingActivity.class);
                intent.putExtra("RECIPIENT_ID", user.get(0).getObjectId());
                startActivity(intent);
            } else {
                Toast.makeText(getActivity().getApplicationContext(),
                        "Error finding that user",
                        Toast.LENGTH_SHORT).show();
            }
        }
    });
}
}
公共类Fragment1扩展了Fragment{
私有字符串currentUserId;
私有ArrayAdapter名称ArrayAdapter;
私有数组列表名称;
私有列表视图用户列表视图;
私人按钮注销按钮;
字符串userGender=ParseUser.getCurrentUser().getString(“性别”);
String activityName=ParseUser.getCurrentUser().getString(“activityName”);
Number maxDistance=ParseUser.getCurrentUser().getNumber(“最大_距离”);
String userLookingGender=ParseUser.getCurrentUser().getString(“Looking_-Gender”);
Number minimumAge=ParseUser.getCurrentUser().getNumber(“最小年龄”);
Number maximumAge=ParseUser.getCurrentUser().getNumber(“最大年龄”);
Number userage=ParseUser.getCurrentUser().getNumber(“年龄”);
@凌驾
已创建ActivityState上的公共无效(Bundle savedInstanceState){
super.onActivityCreated(savedInstanceState);
setConversationsList();
}
@凌驾
CreateView上的公共视图(布局、充气机、视图组容器、捆绑包保存状态){
视图=充气机。充气(右布局。碎片1_布局,容器,假);
返回视图;
}
私有void setConversationsList(){
currentUserId=ParseUser.getCurrentUser().getObjectId();
名称=新的ArrayList();
//字符串userActivitySelectionName=null;
ParseQuery=ParseUser.getQuery();
//query.whereEqualTo(“ActivityName”,userActivitySelectionName);
query.whereNotEqualTo(“objectId”,ParseUser.getCurrentUser().getObjectId());
//性别=currentUser.Looking\u性别的用户
查询:whereEqualTo(“性别”,userLookingGender);
//具有Looking_Gender=currentUser.Gender的用户
查询:whereEqualTo(“寻找性别”,用户性别);
查询设置限制(1);
查询。whereEqualTo(“活动名称”,活动名称);
查询。whereGreaterThanOrEqualTo(“最小年龄”,minimumAge)。whereGreaterThanOrEqualTo(“年龄”,userage);
查询。whereLessThanOrEqualTo(“最大年龄”,最大年龄)。whereLessThanOrEqualTo(“年龄”,用户年龄);
//查询。Wherethinkilometer(“最大距离”、点、最大距离)
findInBackground(新的FindCallback(){
public void done(List userList,parsee异常){
如果(e==null){

对于(int i=0;i,再次调用
getActivity()
之前的
onActivityCreated()
,因此
getActivity()
返回null

onCreateView()
在调用
onActivityCreated()
之前,当活动的onCreate()方法返回时,调用
onActivityCreated()
这意味着当调用
onCreateView()
时,片段的
getActivitiy()
方法将返回null


onCreateView()
中调用
setConversationsList()
,该列表在多个位置访问
getActivity()
。因此
NullPointerException

再次调用
getActivity()
之前的
onActivityCreated()
,因此
getActivity()
返回null

onCreateView()
在调用
onActivityCreated()
之前,当活动的onCreate()方法返回时,调用
onActivityCreated()
这意味着当调用
onCreateView()
时,片段的
getActivitiy()
方法将返回null


onCreateView()
中调用
setConversationsList()
哪个访问
getActivity()
在多个位置。因此,
NullPointerException
在迭代之前,您可能需要检查
List userList
是否为空。

在迭代之前,您可能需要检查
List userList
是否为空。

如果在
setConversationsList()中找到的视图
来自片段的布局(
R.layout.fragment1\u布局
),则必须首先充气布局:

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

    setConversationsList();

    return view;
}

请注意,在创建活动之前使用
getActivity
是完全正常的,因为它已经可用,因为
onAttach
。但是,如果您要查找的视图属于活动的布局,那么您应该在创建活动的视图中找到它们,如果您在
setCon>中找到视图,则应该在
onActivityCreated
中找到它们versationsList()
来自片段的布局(
R.layout.fragment1\u layout
),则必须首先对布局进行充气:

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

    setConversationsList();

    return view;
}

请注意,在
onActivityCreated
之前使用
getActivity
是完全正常的,因为它已经在
onAttach
中可用。但是,如果您要查找的视图属于活动的布局,那么您应该在
onActivityCreated
中找到它们,fragment1.java的第108行是什么?是什么在fragment1.java的第108行?谢谢你的回复。我试图移动东西,但我不确定应该在哪里调用它以避免遇到其他错误。@user3907211你能将
setConversationsList()
移动到
onActivityCreated()吗
?@user3907211为什么不尝试将
onActivityCreated
添加到您的片段中?感谢您的回复。我已将onActivityCreated添加到片段中,但不幸的是,这导致了另一个nullpointer异常代码。我已在我的初始帖子中更新了更新后的代码,如果您能仔细查看,这将非常有用有帮助。@user3907211是
usersListView
null?谢谢你的回复
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment1_layout, container, false);

    setConversationsList();

    return view;
}