0

I need to fetch data from database and set in autocompletetextview but i got error which i try to fix but unable to fix it. and also i am trying to fetch all data by using Id that will be selected through auto complete text view when the user enters itemcode.

In Fragment

    AutoCompleteTextView ItemCode; 

    ItemCode=(AutoCompleteTextView)rootView.findViewById(R.id.purchase_xml_item_code);


helper=new DatabaseHelper(getActivity());
    LoadeAutoCompleteItemCode();

In LoadeAutoCompleteItemCode

private void LoadeAutoCompleteItemCode() {

        final String[] autoCompleteItemeCode = helper.AutoCompleteItemeCode();
        ArrayAdapter adapter = new ArrayAdapter(getActivity(), android.R.layout.simple_list_item_1, autoCompleteItemeCode);
        ItemCode.setAdapter(adapter);
        ItemCode.setThreshold(1);
        ItemCode.dismissDropDown();
        ItemCode.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                Toast.makeText(getActivity(), (CharSequence) parent.getItemAtPosition(position), Toast.LENGTH_SHORT).show();
            }
        });

    }

in my Database Helper AutoCompleteItemCode

 public String[] AutoCompleteItemeCode() {
        try {
            String arrData[] = null;
            SQLiteDatabase db;
            db = this.getReadableDatabase();

            String strSQL = "SELECT C.ID FROM " + Verbs.ITable_Name+" AS C ";
            Cursor cursor = db.rawQuery(strSQL, null);
            if (cursor != null) {

                if (cursor.moveToFirst()) {
                    arrData = new String[cursor.getCount()];
                    int i = 0;
                    do {
                        arrData[i] = cursor.getString(0);
                        i++;
                    } while (cursor.moveToNext());
                }
            }
            cursor.close();
            return arrData;
        } catch (Exception e) {
            return null;
        }
    }

In My XML File

<AutoCompleteTextView
                        android:id="@+id/purchase_xml_item_code"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:layout_alignParentTop="true"
                        android:layout_alignBottom="@+id/imageView_itemcode"
                        android:layout_toRightOf="@+id/imageView_itemcode"
                        android:background="@color/editTextBG"
                        android:hint="@string/purchase_item_code"
                        android:inputType="text"
                        android:paddingLeft="20dp"
                        android:textSize="25sp" />

My Error Logs

E/AndroidRuntime: FATAL EXCEPTION: main
                  java.lang.NullPointerException
                      at com.example.admin6.finaldemo.Fragment.Transaction.Purchase.LoadeAutoCompleteItemCode(Purchase.java:189)
                      at com.example.admin6.finaldemo.Fragment.Transaction.Purchase.onCreateView(Purchase.java:72)
                      at android.support.v4.app.Fragment.performCreateView(Fragment.java:2439)
                      at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1460)
                      at android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1784)
                      at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1852)
                      at android.support.v4.app.BackStackRecord.executeOps(BackStackRecord.java:802)
                      at android.support.v4.app.FragmentManagerImpl.executeOps(FragmentManager.java:2625)
                      at android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2411)
                      at android.support.v4.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManager.java:2366)
                      at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:2273)
                      at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:733)
                      at android.os.Handler.handleCallback(Handler.java:615)
                      at android.os.Handler.dispatchMessage(Handler.java:92)
                      at android.os.Looper.loop(Looper.java:153)
                      at android.app.ActivityThread.main(ActivityThread.java:4987)
                      at java.lang.reflect.Method.invokeNative(Native Method)
                      at java.lang.reflect.Method.invoke(Method.java:511)
                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:821)
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:584)
                      at dalvik.system.NativeStart.main(Native Method)
I/Process: Sending signal. PID: 32197 SIG: 9
Application terminated.

As Error logs Purchase.java:189 on this line indicates here

final String[] autoCompleteItemeCode = helper.AutoCompleteItemeCode();
  • What is at Purchase.java:72? – kelvin Sep 03 '19 at 06:33
  • LoadeAutoCompleteItemCode(); at Purchase.java.72 – Shubham Hingne Sep 03 '19 at 06:50
  • in AutoCompleteItemeCode in catch block add e.printStackTrace(); – kelvin Sep 03 '19 at 06:52
  • added it but nothing change logs are same – Shubham Hingne Sep 03 '19 at 06:55
  • Use arraylist instead of string[], when you query will return 0 results it will send null string [] which will throw Null Pointer – kelvin Sep 03 '19 at 07:23
  • Is "helper" `null`? Because that is the only thing that can throw a `NullPointerException` in `final String[] autoCompleteItemeCode = helper.AutoCompleteItemeCode();` that is not bubbling up from the `AutoCompleteItemeCode` function itself. See https://stackoverflow.com/questions/218384/what-is-a-nullpointerexception-and-how-do-i-fix-it – LWChris Sep 03 '19 at 07:30
  • @LWChris helper is not null helper helper=new DatabaseHelper(getActivity()); – Shubham Hingne Sep 03 '19 at 07:53
  • @ShubhamHingne Where is that `helper=new DatabaseHelper(getActivity());` line in your code? It's not in the excerpts you posted, so maybe it would only be reached after the call of `LoadeAutoCompleteItemCode()`? Try inserting this as first line of `LoadeAutoCompleteItemCode`: `if (helper == null) { Log.e("Helper is null"); }`. If you see that output on the console, you know helper is not initialized yet. – LWChris Sep 03 '19 at 07:58
  • @LWChris the helper=new DatabaseHelper(getActivity()); is insid the onCreateView and the body of LoadeAutoCompleteItemCode() outside of onCreateView which i called .inside of onCreateView – Shubham Hingne Sep 03 '19 at 08:56

1 Answers1

0

Use arraylist instead of string[], when you query will return 0 results it will send null string [] which will throw Null Pointer.

public ArrayList<String> AutoCompleteItemeCode() {
        ArrayList<String> arrData=new ArrayList();
        try {


            SQLiteDatabase db;
            db = this.getReadableDatabase();

            String strSQL = "SELECT C.ID FROM " + Verbs.ITable_Name+" AS C ";
            Cursor cursor = db.rawQuery(strSQL, null);
            if (cursor != null) {

                if (cursor.moveToFirst()) {


                    do {
                        arrData.add( cursor.getString(0));

                    } while (cursor.moveToNext());
                }
            }
            cursor.close();
            return arrData;
        } catch (Exception e) {
            return null;
        }
    }
kelvin
  • 1,480
  • 1
  • 14
  • 28