Question

This is my first post on stackoverflow, so feel free let me know if I'm doing anything wrong.

I'm working on making an android app. For one of my menu activity's I need some sort of widget that will allow the user to pick a number from a predefined set. (ie: {50, 100, 200, 500, 1000, 2000})

I looked at the Spinner, SeekBar, and NumberPicker Widgets, and here's the problems I've found with each.

  • The Spinner seems to only allow strings.
  • The SeekBar and NumberPicker don't seem to easily allow preset values.

Would any of these widgets work for what I'm trying to do? If not, is there another widget that might work better? If not, then how would you recommend I go about this?

Thanks!

Edit:

I tried using a spinner and the Integer.parseInt function. I got a null pointer exception:

02-11 18:21:23.823: E/AndroidRuntime(359): Caused by: java.lang.NullPointerException
02-11 18:21:23.823: E/AndroidRuntime(359):  at com.Package.Jigsaw.PuzzleActivity.onCreate(PuzzleActivity.java:20)

Line 20 of PuzzleActivity is the one where I'm declaring numPc.

Here's the relevant bits of code:

Menu Activity:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.new_puzzle);

    //final Gallery gal = (Gallery) findViewById(R.id.opt_img);

    final Spinner numPc = (Spinner) findViewById(R.id.opt_numpc);
    ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(
            this, R.array.opt_numpc_options, android.R.layout.simple_spinner_item);
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    numPc.setAdapter(adapter);

...snip...

        Button start_btn = (Button) findViewById(R.id.start_puzzle_btn);
    start_btn.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View arg0) {
            // TODO Auto-generated method stub
            Intent i = new Intent("us.kniffin.Jigsaw.OPENPUZZLE");
            //i.putExtra("img", gal.getSelectedItem());
            //i.putExtra("numPc", numPc.getSelectedItem());
            i.putExtra("numPc", Integer.parseInt(numPc.getSelectedItem().toString()));
            //i.putExtra("rot", rot.getSelectedItem().toString());
            //i.putExtra("connType", connType.getSelectedItem().toString());
            startActivity(i);

        }
    });

Main Activity (PuzzleActivity):

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    final PuzzleView v;
    Dimension numPcXY;

    // TODO: update this line to read in options
    int numPc = (Integer) savedInstanceState.get("numPc");  

    // TODO: update this line to read in options
    picture = BitmapFactory.decodeResource(getResources(), R.drawable.test_pic);
    picture = Bitmap.createScaledBitmap(picture, picture.getWidth()/3, picture.getHeight()/3, false);

    // Do some math to do a case statement to determine numPcX and numPcY 
    numPcXY = calcXYpieces(numPc, picture);

    // Create the puzzle
    pieces = new PuzzlePieceSet(picture, numPcXY.getX(), numPcXY.getY());

    v = new PuzzleView(this, pieces);
    setContentView(v);

    pieces.scramble();
}
Was it helpful?

Solution 2

I figured out my issue.

The problem lies in this line:

int numPc = (Integer) savedInstanceState.get("numPc");

I should be using something like this:

Bundle extras = getIntent().getExtras();
int numPc = (Integer) extras.get("numPc");

OTHER TIPS

I personally would use a Spinner and then call Integer.parseInt on the result to get the int you need.

Ok, now with more of your code, please look at this answer (which uses a String, but it is the same for an Integer), you are using the putExtra stuff incorrectly.

See How to use putExtra() and getExtra() for string data for more information.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top