public class Activity_setting extends AppCompatActivity implements View.OnClickListener { final String LOG_TAG = "myLogs"; public String sResh; public String sText; public String[] data_resh = new String[999]; public String[] data_text = new String[999]; Button btnAdd, btnUpd, btnDel, btnRead, btnClear; EditText etResh, etText, etID; DBHelper dbHelper; Spinner spinner_resh,spinner_text; TextView textView; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_setting); btnAdd = (Button) findViewById(R.id.btnAdd); btnAdd.setOnClickListener(this); btnDel = (Button) findViewById(R.id.btnDel); btnDel.setOnClickListener(this); btnRead = (Button) findViewById(R.id.btnRead); btnRead.setOnClickListener(this); etResh = (EditText) findViewById(R.id.etResh); etText = (EditText) findViewById(R.id.etText); // создаем объект для создания и управления версиями БД dbHelper = new DBHelper(this); SQLiteDatabase db = dbHelper.getWritableDatabase(); Cursor cursor = db.query("mytable", new String[]{"id", "resh", "text"}, null, null, null, null, null); cursor.moveToFirst(); String s = ""; int i = 0; while (cursor.moveToNext()) { int id = cursor.getInt(cursor.getColumnIndex("id")); sResh = cursor.getString(cursor.getColumnIndex("resh")); data_resh[i]=sResh; sText = cursor.getString(cursor.getColumnIndex("text")); data_text[i]=sText; TextView infoTextView = (TextView) findViewById(R.id.textView); s = (s+ data_text[i]+" "+data_resh[i]+i+"\n" ); infoTextView.setText(s); i=i+1; } cursor.close(); dbHelper.close(); ArrayAdapter<String> adapter_resh = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, data_resh); adapter_resh.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); spinner_resh = (Spinner) findViewById(R.id.resh_list); spinner_resh.setAdapter(adapter_resh); ArrayAdapter<String> adapter_text = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, data_text); adapter_text.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); spinner_text = (Spinner) findViewById(R.id.text_list); spinner_text.setAdapter(adapter_text); // заголовок в этой теме нет spinner_resh.setPrompt("Title"); spinner_text.setPrompt("Title_2"); // выделяем элемент который будет стоять первый spinner_resh.setSelection(0); spinner_text.setSelection(0); } 

error log

 process: ru.life.sendremedylite, PID: 4108 java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.lang.Object.toString()' on a null object reference at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:394) at android.widget.ArrayAdapter.getDropDownView(ArrayAdapter.java:415) at android.support.v7.widget.AppCompatSpinner$DropDownAdapter.getDropDownView(AppCompatSpinner.java:636) at android.support.v7.widget.AppCompatSpinner$DropDownAdapter.getView(AppCompatSpinner.java:631) at android.support.v7.widget.AppCompatSpinner.compatMeasureContentWidth(AppCompatSpinner.java:558) at android.support.v7.widget.AppCompatSpinner$DropdownPopup.computeContentWidth(AppCompatSpinner.java:749) at android.support.v7.widget.AppCompatSpinner$DropdownPopup.show(AppCompatSpinner.java:774) at android.support.v7.widget.AppCompatSpinner.performClick(AppCompatSpinner.java:432) at android.view.View$PerformClick.run(View.java:19774) at android.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:135) at android.app.ActivityThread.main(ActivityThread.java:5291) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694) 
  • plus noticed that the second variable is going to the first spinner, although I don’t understand why - Alexey Fedorov

2 answers 2

I assume that you catch the NPE because some of the elements in your arrays are null , since the cursor was less than 999 elements. I think that to solve the problem, you need to create an array whose size coincides with the number of elements in the database. To do this, you can first use ArrayList , and then create an array of the desired size. Try to do something like:

 ArrayList<String> reshList = new ArrayList<String>(); ... 

Further, instead of data_resh[i]=sResh; write reshList.add(sResh);

After processing the entire cursor:

 data_resh = new String[reshList.size()]; for(int i = 0; i < reshList.size(); i++) { data_resh[i] = reshList.get(i); } 
      dbHelper = new DBHelper(this); SQLiteDatabase db = dbHelper.getWritableDatabase(); Cursor cursor = db.query("mytable", new String[]{"resh", "text"}, null, null, null, null, null); //cursor.moveToFirst(); int i = 0; while (cursor.moveToNext()) { String sResh = cursor.getString(cursor.getColumnIndex("resh")); String sText = cursor.getString(cursor.getColumnIndex("text")); data_resh.add(sResh); data_text.add(sText); } cursor.close(); dbHelper.close(); ArrayAdapter<String> adapter_resh = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, data_resh); adapter_resh.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); spinner_resh = (Spinner) findViewById(R.id.resh_list); spinner_resh.setAdapter(adapter_resh); 

    suffered for a long time but reading helped, later I saw your answer, began to use arrayList, first noticed that if you put an array of 9 and 9 lines in the base is clogged, everything works, then I read that the string array does not change length, then I read about alternatives, now I think not if I made a mistake by creating one table for related elements, but not completely, the first spiner refers to the second as one to many, in the first array of elements there are fewer elements, and if there are repetitions in one table, I don’t need them, so I’m breaking head what to do