Spinner himself
<Spinner android:layout_width="200dp" android:layout_height="wrap_content" android:id="@+id/spinner" android:spinnerMode="dropdown" android:layout_alignParentTop="true" android:layout_centerHorizontal="true" android:gravity="center" /> How do I fill it with data (from the muscle):
public class ask_phone extends AppCompatActivity implements View.OnClickListener { private FillMap loader; ///объект класса public SparseStringsAdapter adapter; SparseArray mCities = new SparseArray(); /// id,naim @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.ask_phone); ///выдернем данные о городах loader = new FillMap(); loader.execute("http://somesite.ru/get_data.php?_mode=getCity"); } ///класс для получаения данных с внешнего ресурса и заполнения выпадающего списка данными private class FillMap extends AsyncTask<String, String, String> { HttpURLConnection urlConnection = null; BufferedReader reader = null; String resultJson = ""; @Override protected String doInBackground(String... urls) { // получаем данные с внешнего ресурса try { URL url = new URL(urls[0]); urlConnection = (HttpURLConnection) url.openConnection(); urlConnection.setRequestMethod("GET"); urlConnection.setReadTimeout(10000); urlConnection.connect(); InputStream inputStream = urlConnection.getInputStream(); /// Log.d(LOG_TAG,"inputStream "+inputStream); StringBuffer buffer = new StringBuffer(); reader = new BufferedReader(new InputStreamReader(inputStream)); String line; while ((line = reader.readLine()) != null) { buffer.append(line); } resultJson = buffer.toString(); urlConnection.disconnect(); return resultJson; } catch (Exception e) { Log.d(LOG_TAG, "o fack " + e); e.printStackTrace(); return "-1"; } finally { urlConnection.disconnect(); } } @Override protected void onPostExecute(String s) { super.onPostExecute(s); JSONObject dataJsonObj = null; if (s != "-1") try { dataJsonObj = new JSONObject(s); int success = dataJsonObj.getInt("success"); if (success == 1) { ///если данные удалось достать String _mode = dataJsonObj.getString("_mode"); switch (_mode) { case "getCity": ///вытаскиваем все города JSONArray cities = dataJsonObj.getJSONArray("cities"); for (int i = 0; i < cities.length(); i++) { try { JSONObject city = cities.getJSONObject(i); int wId = city.getInt("id"); String city_name = city.getString("city_name"); mCities.put(wId,city_name); } catch (Exception e) { Log.d(LOG_TAG, "shit 1" + e); } } // адаптер adapter = new SparseStringsAdapter(ask_phone.this,mCities); /// adapter. Spinner spinner = (Spinner) findViewById(R.id.spinner); spinner.setAdapter(adapter); // заголовок spinner.setPrompt("Список городов"); // выделяем элемент spinner.setSelection((int) (MapsActivity.mCity-1)); // устанавливаем обработчик нажатия cityId = adapter.getItemId(1); spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { /// Toast.makeText(ask_phone.this, adapter.getItem(position)+"-"+adapter.getItemId(position), Toast.LENGTH_SHORT).show(); cityId = adapter.getItemId(position); } @Override public void onNothingSelected(AdapterView<?> parent) { } }); break; } }///of if } catch (JSONException e) { e.printStackTrace(); } } } public abstract class SparseArrayAdapter<E> extends BaseAdapter { /// http://stackoverflow.com/questions/21677866/how-to-use-sparsearray-as-a-source-for-adapter?answertab=votes#tab-top private SparseArray<E> mData; public void setData(SparseArray<E> data) { mData = data; } @Override public int getCount() { return mData.size(); } @Override public E getItem(int position) { return mData.valueAt(position); } @Override public long getItemId(int position) { return mData.keyAt(position); } } public class SparseStringsAdapter extends SparseArrayAdapter<String> { private final LayoutInflater mInflater; public SparseStringsAdapter(Context context, SparseArray<String> data) { mInflater = LayoutInflater.from(context); setData(data); } @Override public View getView(int position, View convertView, ViewGroup parent) { TextView result = (TextView) convertView; if (result == null) { result = (TextView) mInflater.inflate(android.R.layout.simple_list_item_1, null); } Log.d(LOG_TAG,"result = "+result.getId()); Log.d(LOG_TAG,"getItem(position) = "+getItem(position)); result.setText(getItem(position)); return result; } } }
Falls on the line result.setText (getItem (position)); (at the very bottom), although the logs above this line give out some data.
When this class inherits from Activity, everything worked, but the ActionBar is not shown in it, and AppCompatActivity falls with an error.
Tell me how to make it work
upd Stacktrace:
0java.lang.NullPointerException: Attempt to read from field 'int android.view.ViewGroup$LayoutParams.width' on a null object reference 1 at android.widget.TextView.checkForRelayout(TextView.java:7048) 2 at android.widget.TextView.setText(TextView.java:4070) 3 at android.widget.TextView.setText(TextView.java:3928) 4 at android.widget.TextView.setText(TextView.java:3903) 5 at com.example.necro.googlemaps.ask_phone$SparseStringsAdapter.getView(ask_phone.java:500) 6 at android.widget.BaseAdapter.getDropDownView(BaseAdapter.java:71) 7 at android.support.v7.widget.AppCompatSpinner$DropDownAdapter.getDropDownView(AppCompatSpinner.java:624) 8 at android.support.v7.widget.AppCompatSpinner$DropDownAdapter.getView(AppCompatSpinner.java:620) 9 at android.support.v7.internal.widget.ListViewCompat.measureHeightOfChildrenCompat(ListViewCompat.java:290) 10 at android.support.v7.widget.ListPopupWindow.buildDropDown(ListPopupWindow.java:1200) 11 at android.support.v7.widget.ListPopupWindow.show(ListPopupWindow.java:584) 12 at android.support.v7.widget.AppCompatSpinner$DropdownPopup.show(AppCompatSpinner.java:766) 13 at android.support.v7.widget.AppCompatSpinner.performClick(AppCompatSpinner.java:424) 14 at android.view.View$PerformClick.run(View.java:20101) 15 at android.os.Handler.handleCallback(Handler.java:810) 16 at android.os.Handler.dispatchMessage(Handler.java:99) 17 at android.os.Looper.loop(Looper.java:189) 18 at android.app.ActivityThread.main(ActivityThread.java:5529) 19 at java.lang.reflect.Method.invoke(Native Method) 20 at java.lang.reflect.Method.invoke(Method.java:372) 21 at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:956) 22 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:751)