1

I am using following code.

mDbHelper.open();
        String[] areasList = new String[51];
        for (int i = 0; i<51; i ++)
        {
            areasList[i] = "";
        }
        areasList = mDbHelper.getAllAreas();
        mDbHelper.close();

        ArrayAdapter<String> spinnerArrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, areasList);
        spinnerArrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        chooseArea.setAdapter(spinnerArrayAdapter);

In debugger it shows all the values of String[] taken from database.

public String[] getAllAreas()
    {
        String[] areasList = new String[51];
        String queryString = "SELECT areaName FROM TFTaxi";
        Cursor resultSet =  mDb.rawQuery(queryString, null); 
        for (int i = 0; i<51; i ++)
        {
            areasList[i] = "";
        }
        int i = 1;
        areasList[0] = "Choose your Area";

        while(resultSet.moveToNext())
        {

            areasList[i] = resultSet.getString(resultSet.getColumnIndex("areaName"));
            i++;
        }

        resultSet.close();
        return areasList;
    }

But then it gives error

06-27 23:40:43.882: E/AndroidRuntime(16467): FATAL EXCEPTION: main
06-27 23:40:43.882: E/AndroidRuntime(16467): java.lang.NullPointerException
06-27 23:40:43.882: E/AndroidRuntime(16467):    at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:394)
06-27 23:40:43.882: E/AndroidRuntime(16467):    at android.widget.ArrayAdapter.getView(ArrayAdapter.java:362)
06-27 23:40:43.882: E/AndroidRuntime(16467):    at android.widget.AbsSpinner.onMeasure(AbsSpinner.java:192)
06-27 23:40:43.882: E/AndroidRuntime(16467):    at android.widget.Spinner.onMeasure(Spinner.java:285)
06-27 23:40:43.882: E/AndroidRuntime(16467):    at android.view.View.measure(View.java:12723)
06-27 23:40:43.882: E/AndroidRuntime(16467):    at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:594)
06-27 23:40:43.882: E/AndroidRuntime(16467):    at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:376)
06-27 23:40:43.882: E/AndroidRuntime(16467):    at android.view.View.measure(View.java:12723)
06-27 23:40:43.882: E/AndroidRuntime(16467):    at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:594)
06-27 23:40:43.882: E/AndroidRuntime(16467):    at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:376)
06-27 23:40:43.882: E/AndroidRuntime(16467):    at android.view.View.measure(View.java:12723)
06-27 23:40:43.882: E/AndroidRuntime(16467):    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4698)
06-27 23:40:43.882: E/AndroidRuntime(16467):    at android.widget.FrameLayout.onMeasure(FrameLayout.java:293)
06-27 23:40:43.882: E/AndroidRuntime(16467):    at android.view.View.measure(View.java:12723)
06-27 23:40:43.882: E/AndroidRuntime(16467):    at android.widget.LinearLayout.measureVertical(LinearLayout.java:812)
06-27 23:40:43.882: E/AndroidRuntime(16467):    at android.widget.LinearLayout.onMeasure(LinearLayout.java:553)
06-27 23:40:43.882: E/AndroidRuntime(16467):    at android.view.View.measure(View.java:12723)
06-27 23:40:43.882: E/AndroidRuntime(16467):    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4698)
06-27 23:40:43.882: E/AndroidRuntime(16467):    at android.widget.FrameLayout.onMeasure(FrameLayout.java:293)
06-27 23:40:43.882: E/AndroidRuntime(16467):    at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2092)
06-27 23:40:43.882: E/AndroidRuntime(16467):    at android.view.View.measure(View.java:12723)
06-27 23:40:43.882: E/AndroidRuntime(16467):    at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1064)
06-27 23:40:43.882: E/AndroidRuntime(16467):    at android.view.ViewRootImpl.handleMessage(ViewRootImpl.java:2442)
06-27 23:40:43.882: E/AndroidRuntime(16467):    at android.os.Handler.dispatchMessage(Handler.java:99)
06-27 23:40:43.882: E/AndroidRuntime(16467):    at android.os.Looper.loop(Looper.java:137)
06-27 23:40:43.882: E/AndroidRuntime(16467):    at android.app.ActivityThread.main(ActivityThread.java:4424)
06-27 23:40:43.882: E/AndroidRuntime(16467):    at java.lang.reflect.Method.invokeNative(Native Method)
06-27 23:40:43.882: E/AndroidRuntime(16467):    at java.lang.reflect.Method.invoke(Method.java:511)
06-27 23:40:43.882: E/AndroidRuntime(16467):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
06-27 23:40:43.882: E/AndroidRuntime(16467):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
06-27 23:40:43.882: E/AndroidRuntime(16467):    at dalvik.system.NativeStart.main(Native Method)
1
  • Your array initialization code before calling areasList = mDbHelper.getAllAreas(); is without effect. You can remove it. Other than that: did you verify that your DB does not contain null values? (You can enforce that with the constraint NOT NULL). Commented Jun 27, 2012 at 18:59

3 Answers 3

1
06-27 23:40:43.882: E/AndroidRuntime(16467):    at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:394)
06-27 23:40:43.882: E/AndroidRuntime(16467):    at android.widget.ArrayAdapter.getView(ArrayAdapter.java:362)

from above error it's clear the error is due to any of areasList[i] is null....see line 394

text.setText(item.toString());

  • before iterating set cursor to first cursor.moveToFirst().

.

 cursor.moveToFirst();
        do {


        } while (cursor.moveToNext());
Sign up to request clarification or add additional context in comments.

5 Comments

not working mate, as i already stated that my debugger shows whole String of 51 values with no null character :(
then text (TextView) may be null which is also at 394 let me check
please update the last code and tell where you checked all String of 51 values with no null character
I was taking about TextView inside the ArrayAdapter at line 394 github.com/android/platform_frameworks_base/blob/master/core/…
please update the lasted code with loagcat... (if possible use Log.i in to show the string in logcat )
0

resultSet.moveToNext() - moves to next, so my guess would be you just skip the first item from the DB (even if cursor contains correct number of items - 50).

Try switching from precondition while(resultSet.moveToNext()) {} to postcondition do {} while(resultSet.moveToNext())

Comments

0

I think you skipped one result record by calling moveToNext before processing that record.

Assuming your query returns 50 records only try this change:

public String[] getAllAreas()
    {
        .....
        resultSet.moveToFirst();
        while(!resultSet.isAfterLast())
        {
            areasList[i] = resultSet.getString(resultSet.getColumnIndex("areaName"));
            i++;
            resultSet.moveToNext();
        }
        .........
    }

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.