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

Java 固定字符串的意外nullPointerException

Java 固定字符串的意外nullPointerException,java,android,nullpointerexception,Java,Android,Nullpointerexception,在这个片段中 public class BlankFragment extends Fragment { public BlankFragment() { // Required empty public constructor } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle sav

在这个片段中

public class BlankFragment extends Fragment {

  public BlankFragment() {
    // Required empty public constructor
  }


  @Override
  public View onCreateView(LayoutInflater inflater, ViewGroup container,
                           Bundle savedInstanceState) {

    // Inflate the layout for this fragment
    final View rootView = inflater.inflate(R.layout.fragment_blank, container, false);
    RecyclerView rv = rootView.findViewById(R.id.rv_recycler_view);
    rv.setNestedScrollingEnabled(false);
    SimpleDateFormat localDateFormat = new SimpleDateFormat("HH:mm");

    SunTimes suntime = SunTimes.compute().at(latlang.Lat,latlang.Lang).today().execute();
    String sun_rise = localDateFormat.format(suntime.getRise());
    String sun_set  = localDateFormat.format(suntime.getSet());
    Date sunnoon = suntime.getNoon();
    System.out.println("SUNRISE "+ sun_rise);


    TextView cityField = rootView.findViewById(R.id.tv_city);
    TextView sunrise = rootView.findViewById(R.id.tv_sunrt);
    TextView sunset = rootView.findViewById(R.id.tv_sunst);

    cityField.setText("Hello World");   //Line 45
    sunrise.setText(sun_rise);
    sunset.setText(sun_set);
    return rootView;
  }
我得到一个错误:

  java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.setText(java.lang.CharSequence)' on a null object reference
  at com.example.phocast.BlankFragment.onCreateView(BlankFragment.java:45)
  at android.support.v4.app.Fragment.performCreateView(Fragment.java:2354)
问题是,当我将一个普通字符串作为文本时,它如何获得空点异常

我做错了什么

更新 碎片_挡片没有id,因为它只是一个充气器:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <android.support.v4.widget.SwipeRefreshLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/swiperefresh"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        <android.support.v7.widget.RecyclerView
            android:id="@+id/rv_recycler_view"
            android:layout_width="match_parent"
            android:layout_height="wrap_content">
        </android.support.v7.widget.RecyclerView>
    </android.support.v4.widget.SwipeRefreshLayout>
</RelativeLayout>
以及在适配器中定义的:

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> {
    private String[] mDataset;

    // Provide a reference to the views for each data item
    // Complex data items may need more than one view per item, and
    // you provide access to all the views for a data item in a view holder
    public static class MyViewHolder extends RecyclerView.ViewHolder {
        public CardView mCardView;
        public TextView mTextView;
        public MyViewHolder(View v) {
            super(v);

            mCardView = (CardView) v.findViewById(R.id.card_view);
            mTextView = (TextView) v.findViewById(R.id.tv_city);
        }
    }

    // Provide a suitable constructor (depends on the kind of dataset)
    public MyAdapter(String[] myDataset) {
        mDataset = myDataset;
    }

    // Create new views (invoked by the layout manager)
    @Override
    public MyAdapter.MyViewHolder onCreateViewHolder(ViewGroup parent,
                                                     int viewType) {
        // create a new view
        View v = LayoutInflater.from(parent.getContext())
                .inflate(R.layout.card_item, parent, false);
        // set the view's size, margins, paddings and layout parameters
        MyViewHolder vh = new MyViewHolder(v);
        return vh;
    }

    @Override
    public void onBindViewHolder(MyViewHolder holder, final int position) {
        holder.mTextView.setText(mDataset[position]);
        holder.mCardView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                String currentValue = mDataset[position];
                Log.d("CardView", "CardView Clicked: " + currentValue);
            }
        });
    }

    @Override
    public int getItemCount() {
        return mDataset.length;
    }
}

这与字符串参数无关,而是与调用setText的cityField TextView有关。你在用它初始化

rootView.findViewById(R.id.tv_city);

如果找不到视图,则返回null。因此,您的fragment\u blank布局没有id为tv\u city的视图。

空引用表示“cityField”为空。当您使用rootView.findviewbyd时,请检查以确保ID正确,或者确保页面上的视图具有适当的IDI。如果您再次回顾文章并提供一些帮助,将不胜感激。因此,如果视图由recyclerview适配器膨胀,绑定到它的值(如在TextView上调用setText)应该在同一适配器中。特别是onBindViewHolder。
public class BlankFragment extends Fragment {

  public BlankFragment() {
    // Required empty public constructor
  }
//
//  @Override
//  public void onCreate(Bundle savedInstanceState) {
//    super.onCreate(savedInstanceState);
//
//  }

  @Override
  public View onCreateView(LayoutInflater inflater, ViewGroup container,
                           Bundle savedInstanceState) {

    // Inflate the layout for this fragment
    final View rootView = inflater.inflate(R.layout.fragment_blank, container, false);

    RecyclerView rv = rootView.findViewById(R.id.rv_recycler_view);
    rv.setNestedScrollingEnabled(false);

    Weather_OWM.placeIdTask asyncTask = new Weather_OWM.placeIdTask(new Weather_OWM.AsyncResponse() {
      public void processFinish(String weather_city, String weather_description, String weather_temperature, String weather_humidity, String weather_pressure, String weather_updatedOn, String weather_iconText, String sun_rise, String sun_set) {

        TextView cityField = rootView.findViewById(R.id.tv_city);
        TextView sunrise = rootView.findViewById(R.id.tv_sunrt);
        TextView sunset = rootView.findViewById(R.id.tv_sunst);

        cityField.setText(weather_city);
        sunrise.setText(sun_rise);
        sunset.setText(sun_set);
      }

    });
    asyncTask.execute(Double.toString(latlang.Lat), Double.toString(latlang.Lang)); //  asyncTask.execute("Latitude", "Longitude")

    rv.setHasFixedSize(true);
    MyAdapter adapter = new MyAdapter(new String[]{"Today", "Golden Hour", "Blue Hour", "Civil Twilight", "Nautical Twilight", "Astronomical Twilight", "Hello", "World"});
    rv.setAdapter(adapter);

    LinearLayoutManager llm = new LinearLayoutManager(getActivity());
    rv.setLayoutManager(llm);

    return rootView;
  }
}
rootView.findViewById(R.id.tv_city);