1

I want to make an app which generate random text from an array. I have some errors, I think my code is not good.

This is my MainActivity.

package com.example.bestquotes;


import java.util.Random;

import android.content.res.Resources;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;




public class MainActivity extends ActionBarActivity {

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


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        MenuInflater inflater = getMenuInflater();
        inflater.inflate (R.menu.main, menu);
        return true;
    }


    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch(item.getItemId()){
        case R.id.action_one:
            onClickOne();

        case R.id.action_two:
            onClickTwo();

        }
        return super.onOptionsItemSelected(item);
    }

    public void onClickOne(){
        Resources res = getResources();
        myString = res.getStringArray(R.array.quote);
        final TextView tv = (TextView) findViewById(R.id.quote);
        final String q = myString[rgenerator.nextInt(myString.length)];
        tv.setText(q);
        Button btn = (Button) findViewById(R.id.btn);
        btn.setOnClickListener(new View.OnClickListener(){
            public void onClick(View v){
                myString = getResources().getStringArray(R.array.quote);
                index = rgenerator.nextInt(myString.length);
                String q = myString[index];
                tv.setText(q);
            }
        });
    }

    public void onClickTwo(){
        Resources res = getResources();
        myString = res.getStringArray(R.array.quotetwo);
        final TextView tv2 = (TextView) findViewById(R.id.quote);
        final String q = myString[rgenerator.nextInt(myString.length)];
        tv2.setText(q);
        Button btn = (Button) findViewById(R.id.btn);
        btn.setOnClickListener(new View.OnClickListener(){
            public void onClick(View v){
                myString = getResources().getStringArray(R.array.quotetwo);
                index = rgenerator.nextInt(myString.length);
                String q = myString[index];
                tv2.setText(q);
            }
        });
    }


}

This is mmenu/main.xml :

<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    tools:context="com.example.bestquotes.MainActivity" >

    <Button
        android:id="@+id/btn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:layout_alignParentBottom="true"
        android:background="@drawable/btn" />


    <item

        android:id="@+id/action_settings"
        android:orderInCategory="100"
        android:title="@string/action_settings"
        app:showAsAction="never" />

    <item
        android:visible="true"
      android:id="@+id/action_more"
      android:icon="@drawable/icon"
      android:orderInCategory="1"
      app:showAsAction="always"
      android:title="More" >

      <menu>
          <item 
              android:id="@+id/action_one"
              android:title="Sync"
              />
          <item android:id="@+id/action_two"
              android:title="About"/>
      </menu>

</item>
</menu>

And here is quotes.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string-array name="quote">
        <item>Text random 1</item>
        <item>Text random 2</item>

    </string-array>

    <string-array name="quotetwo">
        <item>Text random 1</item>
        <item>Text random 2</item>


    </string-array>
</resources>

I need some help beucase I am thinking the code is wrong, I mean these 2 methods: onClickOne() and onClickTwo().

10-16 15:14:34.902: E/AndroidRuntime(8626): FATAL EXCEPTION: main
10-16 15:14:34.902: E/AndroidRuntime(8626): java.lang.NullPointerException
10-16 15:14:34.902: E/AndroidRuntime(8626):     at com.example.bestquotes.MainActivity.onClickOne(MainActivity.java:63)
10-16 15:14:34.902: E/AndroidRuntime(8626):     at com.example.bestquotes.MainActivity.onOptionsItemSelected(MainActivity.java:47)
10-16 15:14:34.902: E/AndroidRuntime(8626):     at android.app.Activity.onMenuItemSelected(Activity.java:2610)
10-16 15:14:34.902: E/AndroidRuntime(8626):     at android.support.v4.app.FragmentActivity.onMenuItemSelected(FragmentActivity.java:373)
10-16 15:14:34.902: E/AndroidRuntime(8626):     at android.support.v7.app.ActionBarActivity.superOnMenuItemSelected(ActionBarActivity.java:245)
10-16 15:14:34.902: E/AndroidRuntime(8626):     at android.support.v7.app.ActionBarActivityDelegateICS.onMenuItemSelected(ActionBarActivityDelegateICS.java:164)
10-16 15:14:34.902: E/AndroidRuntime(8626):     at android.support.v7.app.ActionBarActivity.onMenuItemSelected(ActionBarActivity.java:131)
10-16 15:14:34.902: E/AndroidRuntime(8626):     at android.support.v7.app.ActionBarActivityDelegateICS$WindowCallbackWrapper.onMenuItemSelected(ActionBarActivityDelegateICS.java:308)
10-16 15:14:34.902: E/AndroidRuntime(8626):     at com.android.internal.policy.impl.PhoneWindow.onMenuItemSelected(PhoneWindow.java:1144)
10-16 15:14:34.902: E/AndroidRuntime(8626):     at com.android.internal.view.menu.MenuBuilder.dispatchMenuItemSelected(MenuBuilder.java:735)
10-16 15:14:34.902: E/AndroidRuntime(8626):     at com.android.internal.view.menu.SubMenuBuilder.dispatchMenuItemSelected(SubMenuBuilder.java:81)
10-16 15:14:34.902: E/AndroidRuntime(8626):     at com.android.internal.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:149)
10-16 15:14:34.902: E/AndroidRuntime(8626):     at com.android.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:874)
10-16 15:14:34.902: E/AndroidRuntime(8626):     at com.android.internal.view.menu.MenuPopupHelper.onItemClick(MenuPopupHelper.java:175)
10-16 15:14:34.902: E/AndroidRuntime(8626):     at android.widget.AdapterView.performItemClick(AdapterView.java:301)
10-16 15:14:34.902: E/AndroidRuntime(8626):     at android.widget.AbsListView.performItemClick(AbsListView.java:1490)
10-16 15:14:34.902: E/AndroidRuntime(8626):     at android.widget.AbsListView$PerformClick.run(AbsListView.java:3275)
10-16 15:14:34.902: E/AndroidRuntime(8626):     at android.widget.AbsListView$1.run(AbsListView.java:4518)
10-16 15:14:34.902: E/AndroidRuntime(8626):     at android.os.Handler.handleCallback(Handler.java:725)
10-16 15:14:34.902: E/AndroidRuntime(8626):     at android.os.Handler.dispatchMessage(Handler.java:92)
10-16 15:14:34.902: E/AndroidRuntime(8626):     at android.os.Looper.loop(Looper.java:137)
10-16 15:14:34.902: E/AndroidRuntime(8626):     at android.app.ActivityThread.main(ActivityThread.java:5283)
10-16 15:14:34.902: E/AndroidRuntime(8626):     at java.lang.reflect.Method.invokeNative(Native Method)
10-16 15:14:34.902: E/AndroidRuntime(8626):     at java.lang.reflect.Method.invoke(Method.java:511)
10-16 15:14:34.902: E/AndroidRuntime(8626):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1102)
10-16 15:14:34.902: E/AndroidRuntime(8626):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:869)
10-16 15:14:34.902: E/AndroidRuntime(8626):     at dalvik.system.NativeStart.main(Native Method)
3
  • 1
    Look the switch, you need to add the "breaks" in the cases Commented Oct 16, 2014 at 12:21
  • where is your activity_main.xml ? btn is part of menu.xml Commented Oct 16, 2014 at 12:24
  • i dont get what you want to do bro, but you can use the menu view to respond to click to what you want to do instead of button in menu.. Commented Oct 16, 2014 at 12:31

2 Answers 2

3
 <Button
    android:id="@+id/btn"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:gravity="center"
    android:layout_alignParentBottom="true"
    android:background="@drawable/btn" />

goes inside the layout you provided as parameter to setContentView not inside the menu's layout

Sign up to request clarification or add additional context in comments.

Comments

2

Button btn is null, because it is defined in a menu xml file, yet you call findViewById which will look for the id R.id.btn in the Activity's layout, not in the menu.

If you want to define a menu item with an image, you could do something like this :

<item
    ...
    android:icon="@drawable/some_icon_name"/>

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.