textView setText() NullPointerException
Solution 1
Can you post xml? It's likely that the id your java is assuming "R.id.textView1" is wrong. Maybe R.id.textview1?
Well if your text view lives inside the fragment just do this:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_main, container,
false);
TextView tv = (TextView) rootView.findViewById(R.id.textView1);
tv.setText("Teststring");
return rootView;
}
Solution 2
You are giving setContentView()
the wrong layout if your XML is actually declared as fragment_main
. That is why the controls are currently null
.
// The layout file is not correct.
setContentView(R.layout.activity_second);
Comments
-
David Hunsicker over 1 year
I have an almost completely Vanilla App. All I'm trying to do is change the text of a textView, but it gives me a NullPointerException. I have no XML configuration, no added methods, nothing special. I checked my class, and it's pointing to the correct XML, and the XML does have a textView element in it with the correct id.
I have also tried creating the textView instance outside of onCreate() on the class level, and the app just fails to start no matter what. I'm sure I'm overlooking simple, but I can't find the answer. Thanks for the help. EDIT: I realize that I need to move this code so that it accesses fragment resources, but when I do, it gives me an error:
Cannot make a static reference to the non-static method findViewById(int) from the type Activity
Where should I put my code if ALL of my views are in my fragment, and not in my Activity XML? or should I just have the activity load the fragment to begin with? package com.example.testapp;
import android.support.v7.app.ActionBarActivity; import android.support.v7.app.ActionBar; import android.support.v4.app.Fragment; import android.os.Bundle; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; import android.os.Build; public class MainActivity extends ActionBarActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); TextView tv = (TextView) findViewById(R.id.textView1); tv.setText("Teststring"); if (savedInstanceState == null) { getSupportFragmentManager().beginTransaction() .add(R.id.container, new PlaceholderFragment()).commit(); } } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, 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); } public static class PlaceholderFragment extends Fragment { public PlaceholderFragment() { } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View rootView = inflater.inflate(R.layout.fragment_main, container, false); return rootView; } } }
ERROR LOG:
06-14 17:02:27.405: E/AndroidRuntime(1420): FATAL EXCEPTION: main 06-14 17:02:27.405: E/AndroidRuntime(1420): Process: com.example.testapp, PID: 1420 06-14 17:02:27.405: E/AndroidRuntime(1420): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.testapp/com.example.testapp.MainActivity}: java.lang.NullPointerException 06-14 17:02:27.405: E/AndroidRuntime(1420): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2195) 06-14 17:02:27.405: E/AndroidRuntime(1420): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245) 06-14 17:02:27.405: E/AndroidRuntime(1420): at android.app.ActivityThread.access$800(ActivityThread.java:135) 06-14 17:02:27.405: E/AndroidRuntime(1420): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196) 06-14 17:02:27.405: E/AndroidRuntime(1420): at android.os.Handler.dispatchMessage(Handler.java:102) 06-14 17:02:27.405: E/AndroidRuntime(1420): at android.os.Looper.loop(Looper.java:136) 06-14 17:02:27.405: E/AndroidRuntime(1420): at android.app.ActivityThread.main(ActivityThread.java:5017) 06-14 17:02:27.405: E/AndroidRuntime(1420): at java.lang.reflect.Method.invokeNative(Native Method) 06-14 17:02:27.405: E/AndroidRuntime(1420): at java.lang.reflect.Method.invoke(Method.java:515) 06-14 17:02:27.405: E/AndroidRuntime(1420): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) 06-14 17:02:27.405: E/AndroidRuntime(1420): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) 06-14 17:02:27.405: E/AndroidRuntime(1420): at dalvik.system.NativeStart.main(Native Method) 06-14 17:02:27.405: E/AndroidRuntime(1420): Caused by: java.lang.NullPointerException 06-14 17:02:27.405: E/AndroidRuntime(1420): at com.example.testapp.MainActivity.onCreate(MainActivity.java:23) 06-14 17:02:27.405: E/AndroidRuntime(1420): at android.app.Activity.performCreate(Activity.java:5231) 06-14 17:02:27.405: E/AndroidRuntime(1420): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087) 06-14 17:02:27.405: E/AndroidRuntime(1420): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2159) 06-14 17:02:27.405: E/AndroidRuntime(1420): ... 11 more
XML fragment_main
<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:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="com.example.testapp.MainActivity$PlaceholderFragment" > <TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/hello_world" /> </RelativeLayout>
-
David Hunsicker almost 10 yearslike I said, I already checked the XML, and the id is fine. I think it has to do with me trying to access an id that's on the fragment, in the onCreate(). I saw in another post that one has to add the code editing the view in the fragment onCreateView(); but when I do that, i get an error: Cannot make a static reference to the non-static method findViewById(int) from the type Activity
-
David Hunsicker almost 10 yearsI'm using the main_activity XML, and then the fragment_main is loaded. fragment_main is where the views are that I want to manipulate
-
David Hunsicker almost 10 yearsdo you mean the fragment's onCreateView()?
-
rhoadster91 almost 10 yearsno, there is another method called onViewCreated which is called AFTER onCreateView. At this point, the view is inflated and added to the root view. The
View view
parameter supplies the inflated view. Your text view can be found in this view. -
rhoadster91 almost 10 yearsRemember to call
view.findViewById(R.id.textView1)
and not justfindViewById(R.id.textView1)
because in the latter, you are trying to access the parent class non-static method in a static inner class. By callingview.findViewById(R.id.textView1)
you are calling a method of a local variable in the static inner class. -
David Hunsicker almost 10 yearsTextView tv = (TextView) rootView.findViewById(R.id.textView1); "rootView." this was my problem, why do I need this?
-
rhoadster91 almost 10 yearsThat is because you were trying to refer to a non-static method of the parent class in the static inner class. I have mentioned this in my answer below.
-
Ryhan almost 10 yearsthe inflate() method returns a reference to the top-most view in the fragment_main xml hierarchy in this case your relativelayout so you can cast it to that also... and from there you just find the textview that lives in the relative layout
-
mike-gallego about 6 years@DavidHunsicker thanks for pointing that out. I figured out why my app was crashing fromt that.