2012-05-10 7 views
0

Я пытаюсь получить случайную строку из массива, когда я нажимаю кнопку.Случайная строка на кнопке

До сих пор он работал с получением случайной строки, когда приложение запускается, но я не могу заставить его работать после нажатия кнопки после запуска.

EDIT: Теперь он падает при запуске ??

Мой новый код:

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" 
    /> 

Код

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

Вы не определили onClickListener для ваш 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)]); 
    } 
}); 
Смежные вопросы