Keith Thomson
Keith Thomson

Reputation: 63

Nullpointerexception with setText in a Fragment (Android)

I have an app with separate fragments using scroll tabs to go between. Each fragment just displays preset text. The text is going to be formatted for good appearance though so I need to use the html parser to get it to display properly. I'm very new to Java and android so I think my layout may be wrong but Im stumped with this, i was hoping anyone could help! The app crashes on launch. The string exists in the strings file.

This is the fragment:

public static class AboutMeFragment extends Fragment {

    public AboutMeFragment() {
    }

    @Override

    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
         textviewabout = (TextView)getActivity().findViewById(R.id.textviewabout);
         textviewabout.setText(Html.fromHtml(getString(R.string.about_me)));
        View rootView = inflater.inflate(R.layout.aboutme,
                container, false);
        return rootView;
    }
}

And this (again, pretty sure this is incorrect) creates the textview.

public class MainActivity extends FragmentActivity {

 SectionsPagerAdapter mSectionsPagerAdapter;

 ViewPager mViewPager;
 static TextView textviewabout;

And this is aboutme.xml

<ScrollView
    android:layout_width="match_parent"
    android:layout_height="match_parent" >
    <TextView
        android:id="@+id/textviewabout"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:layout_marginLeft="10dp"
        android:layout_marginTop="10dp"
        android:scrollbars = "vertical"
        android:text="@string/about_me" />
     </ScrollView>

Here is log cat:

03-15 18:38:11.332: E/Trace(30586): error opening trace file: No such file or directory (2)
03-15 18:38:11.722: W/dalvikvm(30586): threadid=1: thread exiting with uncaught exception (group=0x41094540)
03-15 18:38:11.802: E/AndroidRuntime(30586): FATAL EXCEPTION: main
03-15 18:38:11.802: E/AndroidRuntime(30586): java.lang.NullPointerException
03-15 18:38:11.802: E/AndroidRuntime(30586):    at com.example.keiththomsonsicv.MainActivity$AboutMeFragment.onCreateView(MainActivity.java:142)
03-15 18:38:11.802: E/AndroidRuntime(30586):    at android.support.v4.app.Fragment.performCreateView(Fragment.java:1500)
03-15 18:38:11.802: E/AndroidRuntime(30586):    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:927)
03-15 18:38:11.802: E/AndroidRuntime(30586):    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1104)
03-15 18:38:11.802: E/AndroidRuntime(30586):    at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682)
03-15 18:38:11.802: E/AndroidRuntime(30586):    at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1467)
03-15 18:38:11.802: E/AndroidRuntime(30586):    at android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:472)
03-15 18:38:11.802: E/AndroidRuntime(30586):    at android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:141)
03-15 18:38:11.802: E/AndroidRuntime(30586):    at android.support.v4.view.ViewPager.populate(ViewPager.java:1068)
03-15 18:38:11.802: E/AndroidRuntime(30586):    at android.support.v4.view.ViewPager.populate(ViewPager.java:914)
03-15 18:38:11.802: E/AndroidRuntime(30586):    at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1436)
03-15 18:38:11.802: E/AndroidRuntime(30586):    at android.view.View.measure(View.java:15286)
03-15 18:38:11.802: E/AndroidRuntime(30586):    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4832)
03-15 18:38:11.802: E/AndroidRuntime(30586):    at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
03-15 18:38:11.802: E/AndroidRuntime(30586):    at android.view.View.measure(View.java:15286)
03-15 18:38:11.802: E/AndroidRuntime(30586):    at android.widget.LinearLayout.measureVertical(LinearLayout.java:833)
03-15 18:38:11.802: E/AndroidRuntime(30586):    at android.widget.LinearLayout.onMeasure(LinearLayout.java:574)
03-15 18:38:11.802: E/AndroidRuntime(30586):    at android.view.View.measure(View.java:15286)
03-15 18:38:11.802: E/AndroidRuntime(30586):    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4832)
03-15 18:38:11.802: E/AndroidRuntime(30586):    at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
03-15 18:38:11.802: E/AndroidRuntime(30586):    at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2230)
03-15 18:38:11.802: E/AndroidRuntime(30586):    at android.view.View.measure(View.java:15286)
03-15 18:38:11.802: E/AndroidRuntime(30586):    at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2105)
03-15 18:38:11.802: E/AndroidRuntime(30586):    at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1262)
03-15 18:38:11.802: E/AndroidRuntime(30586):    at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1492)
03-15 18:38:11.802: E/AndroidRuntime(30586):    at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1160)
03-15 18:38:11.802: E/AndroidRuntime(30586):    at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:4682)
03-15 18:38:11.802: E/AndroidRuntime(30586):    at android.view.Choreographer$CallbackRecord.run(Choreographer.java:738)
03-15 18:38:11.802: E/AndroidRuntime(30586):    at android.view.Choreographer.doCallbacks(Choreographer.java:564)
03-15 18:38:11.802: E/AndroidRuntime(30586):    at android.view.Choreographer.doFrame(Choreographer.java:532)
03-15 18:38:11.802: E/AndroidRuntime(30586):    at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:723)
03-15 18:38:11.802: E/AndroidRuntime(30586):    at android.os.Handler.handleCallback(Handler.java:615)
03-15 18:38:11.802: E/AndroidRuntime(30586):    at android.os.Handler.dispatchMessage(Handler.java:92)
03-15 18:38:11.802: E/AndroidRuntime(30586):    at android.os.Looper.loop(Looper.java:155)
03-15 18:38:11.802: E/AndroidRuntime(30586):    at android.app.ActivityThread.main(ActivityThread.java:5520)
03-15 18:38:11.802: E/AndroidRuntime(30586):    at java.lang.reflect.Method.invokeNative(Native Method)
03-15 18:38:11.802: E/AndroidRuntime(30586):    at java.lang.reflect.Method.invoke(Method.java:511)
03-15 18:38:11.802: E/AndroidRuntime(30586):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1029)
03-15 18:38:11.802: E/AndroidRuntime(30586):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:796)
03-15 18:38:11.802: E/AndroidRuntime(30586):    at dalvik.system.NativeStart.main(Native Method)

About me.xml

<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=".MainActivity$AboutMeFragment" >
<ScrollView
    android:layout_width="match_parent"
    android:layout_height="match_parent" >
    <TextView
        android:id="@+id/textviewabout"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:layout_marginLeft="10dp"
        android:layout_marginTop="10dp"
        android:scrollbars = "vertical"
        android:text="textviewabout" />
     </ScrollView>

</RelativeLayout>

Upvotes: 0

Views: 2548

Answers (3)

waqaslam
waqaslam

Reputation: 68187

You should initialize views and call setText in onActivityCreated of your Fragment. Because there might be a possibility that your views are not ready yet.

Upvotes: 1

Christian
Christian

Reputation: 4641

It would be easier to find errors if you provide the Stacktrace from LogCat, but I see one obvious error:

In your Fragment you are referring to the Activity to get the TextView, but your textviewabout is sure a part of your fragment, so I am sure the code has to be

public static class AboutMeFragment extends Fragment {

     public AboutMeFragment() {
     }

     @Override

     public View onCreateView(LayoutInflater inflater, ViewGroup container,
             Bundle savedInstanceState) {
          View rootView = inflater.inflate(R.layout.aboutme,
            container, false);
          textviewabout = (TextView)rootView.findViewById(R.id.textviewabout);
          textviewabout.setText(Html.fromHtml(getString(R.string.about_me)));
          return rootView;
     }
}

Edit: Further in your activity you only show the declarations, no code how you want to show the Fragment. You should add the XML of your Activity to show if the Fragment is declared there.

Upvotes: 5

yekretsaM
yekretsaM

Reputation: 441

It seems to me that your textviewabout object is null (maybe you can confirm this by debugging your application).

How are you telling your Activity to use the aboutme.xml as a layout? Do you really intend to use this layout for the activity or do you want to use it for the fragment ui?

If you want to use it for the fragment you have to use the inflater you get in the onCreateView method to inflate your aboutme.xml layout first and then retrieve the TextView afterwards (and you might want to have the TextView inside the Fragment class, there should be no need for a static view class in any normal szenario)

Regards, Thomas

Upvotes: 0

Related Questions