2012-05-10 6 views
0

ボタンを押したときに配列からランダムな文字列を取得しようとしています。ボタンを押したときのランダムな文字列

これまでのところ、アプリケーションの起動時にランダムな文字列を取得することができますが、起動後にボタンを押すと機能するようにはできません。

編集: 起動時にクラッシュしますか?

私の新しいコード:

private String[] myString; 
private static final Random rgenerator = new Random(); 


@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 



    TextView tv = (TextView) findViewById(R.id.joke); 
    Resources res = getResources(); 

    myString = res.getStringArray(R.array.Jokes); 

    String q = myString[rgenerator.nextInt(myString.length)];  
    tv.setText(q); 
    Button btn = (Button)findViewById(R.id.button); 


btn.setOnClickListener(new OnClickListener() { 
public void onClick(View v) { 

    myString = res.getStringArray(R.array.Jokes); 

    String q = myString[rgenerator.nextInt(myString.length)];  
    tv.setText(q); 
    } 
}); 

} 
} 

Logcatは言う:

03-31 22:47:35.777: W/dalvikvm(1152): threadid=3: thread exiting with uncaught exception (group=0x4001b188) 
03-31 22:47:35.777: E/AndroidRuntime(1152): Uncaught handler: thread main exiting due to uncaught exception 
03-31 22:47:35.903: E/AndroidRuntime(1152): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.jc.dkjokes/com.jc.dkjokes.DanskeJokesMain}: java.lang.NullPointerException 
03-31 22:47:35.903: E/AndroidRuntime(1152):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2417) 
03-31 22:47:35.903: E/AndroidRuntime(1152):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2512) 
03-31 22:47:35.903: E/AndroidRuntime(1152):  at android.app.ActivityThread.access$2200(ActivityThread.java:119) 
03-31 22:47:35.903: E/AndroidRuntime(1152):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1863) 
03-31 22:47:35.903: E/AndroidRuntime(1152):  at android.os.Handler.dispatchMessage(Handler.java:99) 
03-31 22:47:35.903: E/AndroidRuntime(1152):  at android.os.Looper.loop(Looper.java:123) 
03-31 22:47:35.903: E/AndroidRuntime(1152):  at android.app.ActivityThread.main(ActivityThread.java:4363) 
03-31 22:47:35.903: E/AndroidRuntime(1152):  at java.lang.reflect.Method.invokeNative(Native Method) 
03-31 22:47:35.903: E/AndroidRuntime(1152):  at java.lang.reflect.Method.invoke(Method.java:521) 
03-31 22:47:35.903: E/AndroidRuntime(1152):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860) 
03-31 22:47:35.903: E/AndroidRuntime(1152):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) 
03-31 22:47:35.903: E/AndroidRuntime(1152):  at dalvik.system.NativeStart.main(Native Method) 
03-31 22:47:35.903: E/AndroidRuntime(1152): Caused by: java.lang.NullPointerException 
03-31 22:47:35.903: E/AndroidRuntime(1152):  at android.app.Activity.findViewById(Activity.java:1612) 
03-31 22:47:35.903: E/AndroidRuntime(1152):  at com.jc.dkjokes.DanskeJokesMain.<init>(DanskeJokesMain.java:17) 
03-31 22:47:35.903: E/AndroidRuntime(1152):  at java.lang.Class.newInstanceImpl(Native Method) 
03-31 22:47:35.903: E/AndroidRuntime(1152):  at java.lang.Class.newInstance(Class.java:1479) 
03-31 22:47:35.903: E/AndroidRuntime(1152):  at android.app.Instrumentation.newActivity(Instrumentation.java:1021) 
03-31 22:47:35.903: E/AndroidRuntime(1152):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2409) 
03-31 22:47:35.903: E/AndroidRuntime(1152):  ... 11 more 
03-31 22:47:35.963: I/dalvikvm(1152): threadid=7: reacting to signal 3 
03-31 22:47:36.148: I/dalvikvm(1152): Wrote stack trace to '/data/anr/traces.txt' 
  • SnoX
+1

ボタンのクリックイベントまたはコードはどこですか? –

+0

ボタンはまったく反応しますか?もちろん、関連するコードを投稿する必要があります... – keyser

+0

あなたのonClickイベントはどこですか? onClickを検索すると、何千もの例が見つかります。また、関数にランダムな文字列を取得するコードを移動します。そうすればonCreateで動作すればどこでも動作します。あなたのコードを投稿するときにさらに問題があると誰かがジャンプします。 – cstrutton

答えて

0

あなたは、あなたのmain.xmlファイルで一つのボタンを宣言する必要があることを達成するためにそれを自分のアクティビティで初期化する必要があります。その後、そのボタンのクリックイベントリスナーを設定する必要があります。

<Button 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:id="@+id/buttonClick" 
    /> 

あなたはonClickListenerについて定義していない

TextView tv = (TextView) findViewById(R.id.joke); 
Button btn = (Button)findViewbyId(R.id.buttonClick); 
    btn.setonclickListener(new onClickListner(){ 
      public void onclick() 
      { 
       myString = getResources().getStringArray(R.array.Jokes); 
       String q = myString[rgenerator.nextInt(myString.length)]; 
       tv.setText(q); 
      } 
    }); 
+0

今私はクラッシュを取得します。 – SnoX

+0

どこですか?あなたはどうですか? –

+0

更新された最初の投稿 – SnoX

1

ボタンをクリックし、このようなものの上に文字列を生成するためのonClickListener()を定義する必要があり、

Button btn = (Button)findViewbyId(R.id.yourbuttonid); 
    btn.setonclickListener(new onClickListner(){ 
      public void onclick() 
      { 
       //write your oncreate code here again 
      } 
    }); 
0

コードあなたのButton。次のようにしてください:

Button button = findViewById(R.id.button); 
TextView tv = findViewById(R.id.joke); 

button.setOnClickListener(new OnClickListener() 
    public void onClick(View view) { 
     String[] myString = getResources().getStringArray(R.array.Jokes); 
     tv.setText(myString[rgenerator.nextInt(myString.length)]); 
    } 
}); 
関連する問題