2013-07-12 43 views
0

我試圖從我的Android應用程序中的java代碼中讀取文本,但我得到Force Close。我使用2.3.1仿真器,我使用下面的代碼罷工通Android Strike Through Text

TextView tvTxt=(TextView)findViewById(R.id.textView1); 
tvTxt.setPaintFlags(tvTxt.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG); 

請幫我解決這個難題。

在此先感謝。

這是我的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) 

NullPointer上升線在Logcat

Caused by: java.lang.NullPointerException at com.colors.assasin.MainActivity.onCreate(MainActivity.java:27)

tvTxt.setPaintFlags(tvTxt.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);

MainActivity.java是非常簡單的

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); 

    } 
} 

activity_main.xml的代碼是

<?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> 
+0

你有一些Logcat嗎? –

+0

@Stefan Beike請參閱編輯後的帖子,謝謝。 –

+0

第27行是什麼?是tvTxt null? – jkhouw1

回答

0

好了 - 我不知道什麼是對...有了,但我不想刪除,以便其他人可以看到評論。 我測試過

TextView t=new TextView(mContext); 
t.setPaintFlags(t.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG); 

它投擲了一個NPE。 我把它改爲

TextView t=new TextView(mContext); 
t.setText("t"); 
t.setPaintFlags(t.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG); 

它沒有。 我改成了

TextView t=new TextView(mContext); 
t.setPaintFlags(Paint.STRIKE_THRU_TEXT_FLAG); 

纔沒有 最後我改回了

TextView t=new TextView(mContext); 
t.setPaintFlags(t.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG); 

,它沒有。

您必須在textview上設置paintflags,然後才能執行getPaintFlags,否則您將獲得NPE。 所以也許你應該只使用

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) 
} 

+0

我不這麼認爲。 – SKK

+0

TextView t = new TextView(context); t.setPaintFlags(t.getPaintFlags()| Paint.STRIKE_THRU_TEXT_FLAG); ^會給NPE TextView t = new TextView(mContext); t.setText(「t」); t.setPaintFlags(t.getPaintFlags()| Paint.STRIKE_THRU_TEXT_FLAG); ^不會給NPE – jkhouw1

+0

我在TextView中有文本,請通過我的'activity_main.xml'代碼@ jkhouw1 –

1

使用SpannableString獲得的刪除效果。

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())); 
+0

'NPE' conitnues。 –