Reputation: 2070
I'm trying to strike a text from my java code in my android application, but I'm getting Force Close
. I'm using 2.3.1
emulator, I'm using the following code to strike thru
TextView tvTxt=(TextView)findViewById(R.id.textView1);
tvTxt.setPaintFlags(tvTxt.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);
Please help me to solve this puzzle.
Thanks in advance.
This is my Logcat
07-12 17:19:41.172: E/AndroidRuntime(1777): FATAL EXCEPTION: main
07-12 17:19:41.172: E/AndroidRuntime(1777): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.colors.assasin/com.colors.assasin.MainActivity}: java.lang.NullPointerException
07-12 17:19:41.172: E/AndroidRuntime(1777): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1622)
07-12 17:19:41.172: E/AndroidRuntime(1777): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1638)
07-12 17:19:41.172: E/AndroidRuntime(1777): at android.app.ActivityThread.access$1500(ActivityThread.java:117)
07-12 17:19:41.172: E/AndroidRuntime(1777): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:928)
07-12 17:19:41.172: E/AndroidRuntime(1777): at android.os.Handler.dispatchMessage(Handler.java:99)
07-12 17:19:41.172: E/AndroidRuntime(1777): at android.os.Looper.loop(Looper.java:123)
07-12 17:19:41.172: E/AndroidRuntime(1777): at android.app.ActivityThread.main(ActivityThread.java:3647)
07-12 17:19:41.172: E/AndroidRuntime(1777): at java.lang.reflect.Method.invokeNative(Native Method)
07-12 17:19:41.172: E/AndroidRuntime(1777): at java.lang.reflect.Method.invoke(Method.java:507)
07-12 17:19:41.172: E/AndroidRuntime(1777): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
07-12 17:19:41.172: E/AndroidRuntime(1777): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
07-12 17:19:41.172: E/AndroidRuntime(1777): at dalvik.system.NativeStart.main(Native Method)
07-12 17:19:41.172: E/AndroidRuntime(1777): Caused by: java.lang.NullPointerException
07-12 17:19:41.172: E/AndroidRuntime(1777): at com.colors.assasin.MainActivity.onCreate(MainActivity.java:27)
07-12 17:19:41.172: E/AndroidRuntime(1777): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
07-12 17:19:41.172: E/AndroidRuntime(1777): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1586)
The NullPointer
rising line as in Logcat
is
Caused by: java.lang.NullPointerException at com.colors.assasin.MainActivity.onCreate(MainActivity.java:27)
is
tvTxt.setPaintFlags(tvTxt.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);
My MainActivity.java
is pretty simple
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TextView our_text=(TextView)findViewById(R.id.textView1);
our_text.setPaintFlags(our_text.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);
}
}
The code of activity_main.xml
is
<?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="wrap_content"
android:layout_centerVertical="true" >
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="30sp"
android:text="TextView" />
</RelativeLayout>
Upvotes: 0
Views: 469
Reputation: 1436
Use SpannableString to get a StrikeThrough effect.
private SpannableString strikeThrough(String text) {
SpannableString spannableString = new SpannableString(text);
spannableString.setSpan(new StrikethroughSpan(), 0, text.length(), 0);
return spannableString;
}
TextView our_text = (TextView) findViewById(R.id.our_text);
our_text.setText(strikeThrough((String) our_text.getText()));
Upvotes: 1
Reputation: 7350
Ok - I don't know what is going on... but I don't want to delete this so others can see the comments. I tested
TextView t=new TextView(mContext);
t.setPaintFlags(t.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);
and it threw an NPE. I changed it to
TextView t=new TextView(mContext);
t.setText("t");
t.setPaintFlags(t.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);
and it didn't. I changed it to
TextView t=new TextView(mContext);
t.setPaintFlags(Paint.STRIKE_THRU_TEXT_FLAG);
and it didn't and finally I changed it back to
TextView t=new TextView(mContext);
t.setPaintFlags(t.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);
and it didn't.
You have to have paintflags set on the textview before you can do the getPaintFlags or you will get an NPE. so perhaps you should just use
our_text.setPaintFlags(Paint.STRIKE_THRU_TEXT_FLAG)
if(our_text.getPaintFlags()!=null){
our_text.setPaintFlags(our_text.getPaintFlags()|Paint.STRIKE_THRU_TEXT_FLAG)
}
else {
our_text.setPaintFlags(Paint.STRIKE_THRU_TEXT_FLAG)
}
Upvotes: 0