Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/389.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 Fragments - Fatal编程技术网

Java 获取片段中的NullPointerException错误

Java 获取片段中的NullPointerException错误,java,android,android-fragments,Java,Android,Android Fragments,以下代码引发NullPointerException错误。我不明白为什么。您能检查一下吗?在这里输入代码 我在一个主要活动中得到了2个片段,如下所示 RSSFeedActivity在此处输入代码 MyListFragment(包含一个按钮) DetailFragment(包含textview) /*********************此处的活动代码******************/ package com.example.oksijen02.unit2.multipanelFragmen

以下代码引发NullPointerException错误。我不明白为什么。您能检查一下吗?
在这里输入代码

我在一个主要活动中得到了2个片段,如下所示

  • RSSFeedActivity
    在此处输入代码
  • MyListFragment(包含一个按钮)
  • DetailFragment(包含textview)
  • /*********************此处的活动代码******************/

    package com.example.oksijen02.unit2.multipanelFragment;
    import android.app.Activity;
    import android.os.Bundle;
    import android.util.Log;
    import com.example.oksijen02.intent.R;
    
    public class RSSFeedActivity extends Activity implements MyListFragment.OnItemSelectedListener{
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.u2_fragment_activity_main);
        }
        @Override    public void onRSSItemSelected(String link) {        Log.d("butona tiklandi", "onRSSItemSelected: ");
            DetailFragment fragment = (DetailFragment) getFragmentManager().findFragmentById(R.id.detailFragment);
            fragment.setText(link);
        }
    }
    
    /*******************MyListFragment************************/

    package com.example.oksijen02.unit2.multipanelFragment;
    
    import android.app.Fragment;
    import android.content.Context;
    import android.os.Bundle;
    import android.support.annotation.Nullable;
    import android.util.Log;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.Button;
    
    import com.example.oksijen02.intent.R;
    public class MyListFragment extends Fragment {
        private OnItemSelectedListener listener;
        @Nullable
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
            super.onCreateView(inflater, container, savedInstanceState);
            View view = inflater.inflate(R.layout.u2_fragment_rsslist_overview,container,false);
            Button detailButton = (Button) view.findViewById(R.id.detailButton);
    
            detailButton.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    updateDetail("fake");
                }
            });
    
            return view;
        }
    
        @Override
        public void onAttach(Context context) {
            super.onAttach(context);
            Log.d("in on attach", "onAttach");
            if(context instanceof OnItemSelectedListener){
                Log.d("context is not of ", "onAttach:");
                listener = (OnItemSelectedListener) context;
            }else{
                throw new ClassCastException(context.toString()+" must implement MyListFragment.OnItemSelectedListener");
            }
        }
    
        public interface OnItemSelectedListener{
            public void onRSSItemSelected(String link);
        }
    
        public void updateDetail(String fake) {
            Log.d("tikladi update", "updateDetail");
            String newTime = String.valueOf(System.currentTimeMillis());
            Log.d("newtime"+newTime, "updateDetail");
    
            Log.d("listener"+listener.toString(), "updateDetail");
            listener.onRSSItemSelected(newTime);
        }
    
    }
    
    package com.example.oksijen02.unit2.multipanelFragment;
    
    import android.app.Fragment;
    import android.os.Bundle;
    import android.support.annotation.Nullable;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.TextView;
    import com.example.oksijen02.intent.R;
    
    public class DetailFragment extends Fragment {
    
        @Nullable
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
            super.onCreateView(inflater, container, savedInstanceState);
            View view = inflater.inflate(R.layout.u2_fragment_rss_item_detail, container,false);
            return view;
        }
    
        public void setText(String url) {
            TextView textview = (TextView) getView().findViewById(R.id.detailsText);
            textview.setText(url);
        }
    }
    
    /***********************详细片段代码******************************/

    package com.example.oksijen02.unit2.multipanelFragment;
    
    import android.app.Fragment;
    import android.content.Context;
    import android.os.Bundle;
    import android.support.annotation.Nullable;
    import android.util.Log;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.Button;
    
    import com.example.oksijen02.intent.R;
    public class MyListFragment extends Fragment {
        private OnItemSelectedListener listener;
        @Nullable
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
            super.onCreateView(inflater, container, savedInstanceState);
            View view = inflater.inflate(R.layout.u2_fragment_rsslist_overview,container,false);
            Button detailButton = (Button) view.findViewById(R.id.detailButton);
    
            detailButton.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    updateDetail("fake");
                }
            });
    
            return view;
        }
    
        @Override
        public void onAttach(Context context) {
            super.onAttach(context);
            Log.d("in on attach", "onAttach");
            if(context instanceof OnItemSelectedListener){
                Log.d("context is not of ", "onAttach:");
                listener = (OnItemSelectedListener) context;
            }else{
                throw new ClassCastException(context.toString()+" must implement MyListFragment.OnItemSelectedListener");
            }
        }
    
        public interface OnItemSelectedListener{
            public void onRSSItemSelected(String link);
        }
    
        public void updateDetail(String fake) {
            Log.d("tikladi update", "updateDetail");
            String newTime = String.valueOf(System.currentTimeMillis());
            Log.d("newtime"+newTime, "updateDetail");
    
            Log.d("listener"+listener.toString(), "updateDetail");
            listener.onRSSItemSelected(newTime);
        }
    
    }
    
    package com.example.oksijen02.unit2.multipanelFragment;
    
    import android.app.Fragment;
    import android.os.Bundle;
    import android.support.annotation.Nullable;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.TextView;
    import com.example.oksijen02.intent.R;
    
    public class DetailFragment extends Fragment {
    
        @Nullable
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
            super.onCreateView(inflater, container, savedInstanceState);
            View view = inflater.inflate(R.layout.u2_fragment_rss_item_detail, container,false);
            return view;
        }
    
        public void setText(String url) {
            TextView textview = (TextView) getView().findViewById(R.id.detailsText);
            textview.setText(url);
        }
    }
    
    错误如下所示:

     PID: 15763 java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.lang.Object.toString()' on a null object reference at com.example.oksijen02.unit2.multipanelFragment.MyListFragment.updateDetail(MyListFragment.java:59) at com.example.oksijen02.unit2.multipanelFragment.MyListFragment$1.onClick(MyListFragment.java:30) at android.view.View.performClick(View.java:5181) at android.view.View$PerformClick.run(View.java:20887) at 
    

    当我在网站上搜索时,我找到了为什么onAttach方法不调用的答案。请从中找到答案

    因此,我在MyListFragment代码中添加了以下代码:

    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);
        if(activity instanceof OnItemSelectedListener){
            Log.d("context is not of ", "onAttach:");
            listener = (OnItemSelectedListener) activity;
        }else{
            throw new ClassCastException(activity.toString()+" must implement MyListFragment.OnItemSelectedListener");
        }
    
    }