从 Spinner 获取数据(Android Studio)

Getting data from a Spinner (Android Studio)

我正在尝试从三个微调器获取数据,准备 POST 它。我的代码有一大堆我不理解的错误……我是 Java/Android 的新手。我环顾四周,我使用的代码来自另一个 Whosebug 答案,但它确实有效:

//Spinner data
        final Spinner findViewById(R.id.spinner_house);
        String spinner_house_data = spinner_house.getSelectedItem().toString();

        final Spinner findViewById(R.id.spinner_year);
        String spinner_year_data = spinner_year.getSelectedItem().toString();

        final Spinner spinner_name = (Spinner) findViewById(R.id.spinner_name);
        String spinner_name_data = spinner_name.getSelectedItem().toString();

具体的错误是:

感谢您的帮助,正如我所说的,我是 Android 的新手,这有点令人困惑! (这个 JSON 请求需要 5 行 jQuery!)

您忘记为前 2 个微调器指定变量名。 第三个微调器的代码看起来不错。

这是你应该拥有的:

    final Spinner spinner_house = (Spinner) findViewById(R.id.spinner_house);
    String spinner_house_data = spinner_house.getSelectedItem().toString();

    final Spinner spinner_year = (Spinner) findViewById(R.id.spinner_year);
    String spinner_year_data = spinner_year.getSelectedItem().toString();

    final Spinner spinner_name = (Spinner) findViewById(R.id.spinner_name);
    String spinner_name_data = spinner_name.getSelectedItem().toString();

我认为这会解决您的问题:

 final Spinner spinner_house = (Spinner) findViewById(R.id.spinner_house);
    String spinner_house_data = spinner_house.getSelectedItem().toString();

    final Spinner spinner_year = (Spinner) findViewById(R.id.spinner_year);
    String spinner_year_data = spinner_year.getSelectedItem().toString();

    final Spinner spinner_name = (Spinner) findViewById(R.id.spinner_name);
    String spinner_name_data = spinner_name.getSelectedItem().toString();

但是如果你的变量已经声明了:

spinner_house = (Spinner) findViewById(R.id.spinner_house);
spinner_house_data = spinner_house.getSelectedItem().toString();

spinner_year = (Spinner) findViewById(R.id.spinner_year);
spinner_year_data = spinner_year.getSelectedItem().toString();

spinner_name = (Spinner) findViewById(R.id.spinner_name);
spinner_name_data = spinner_name.getSelectedItem().toString();

而不是:

final Spinner findViewById(R.id.spinner_house); 

使用这个:

final Spinner spinner_house= (Spinner)findViewById(R.id.spinner_house);

而不是:

final Spinner findViewById(R.id.spinner_year);  

使用这个:

final Spinner spinner_year= (Spinner)findViewById(R.id.spinner_year);

考虑使用监听器。

因此每个微调器都会跟踪在成员变量中选择的内容。

   String s1Value;

   s1.setAdapter(adapter);

   s1.setOnItemSelectedListener(
            new OnItemSelectedListener() {
                public void onItemSelected(
                        AdapterView<?> parent, View view, int position, long id) {
                   s1Value = adapter.get(position);
                }

                public void onNothingSelected(AdapterView<?> parent) {

                   s1Value = "";
                }
            });

1) 先在android清单中添加权限

 <uses-permission android:name="android.permission.INTERNET" />

2) 添加gradle.build

useLibrary 'org.apache.http.legacy'

3) 使用微调器创建布局

<Spinner
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/spinner"
        android:layout_below="@+id/textView"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_marginTop="38dp" />

4) 然后接下来在 src 中用 class MainActivity

编写代码
public class MainActivity extends AppCompatActivity {

String URL="YOUR URL HERE";
        JSONArray Cities=null;
        ArrayList<Cities> citiesList =new ArrayList<Cities>(); Spinner citiesspinner;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            new JSONAsyncTask().execute();

        }

private class JSONAsyncTask extends AsyncTask<String, Void, JSONArray> {

  private ProgressDialog dialog = new ProgressDialog(MainActivity.this);

  @Override
  protected void onPreExecute() {
      this.dialog.setMessage("Please wait");
      this.dialog.show();
  }

  @Override
  protected JSONArray doInBackground(String... urls) {
      try {

          //------------------>>
          HttpGet httppost = new HttpGet(URL);
          HttpClient httpclient = new DefaultHttpClient();
          HttpResponse response = httpclient.execute(httppost);

          // StatusLine stat = response.getStatusLine();
          int status = response.getStatusLine().getStatusCode();

          if (status == 200) {
              HttpEntity entity = response.getEntity();
              String data = EntityUtils.toString(entity);


              JSONObject jsono = new JSONObject(data);
               Cities = jsono.getJSONArray("Cities");
              return Cities;
          }


      } catch (IOException e) {
          e.printStackTrace();
      } catch (JSONException e) {

          e.printStackTrace();
      }
      return Cities;
  }

  protected void onPostExecute(JSONArray result) {
      dialog.dismiss();
      System.out.println(result);

      for (int i = 0; i < result.length(); i++) {
          JSONObject c = null;
          try {
              Cities cities=new Cities();
              c = result.getJSONObject(i);
              cities.setId(c.getString("CityID"));
              cities.setCityname(c.getString("CityName"));
              citiesList.add(cities);
          } catch (JSONException e) {
              e.printStackTrace();
          }

      }

      citiesspinner = (Spinner) findViewById(R.id.spinner);
      citiesspinner.setAdapter(new SpinnerAdapter(getApplicationContext(), citiesList));

      citiesspinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
          @Override
          public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int position, long id) {
              // your code here

              String value=citiesList.get(position).getCityname();
              Toast.makeText(getApplicationContext(),value,Toast.LENGTH_LONG).show();
          }

          @Override
          public void onNothingSelected(AdapterView<?> parentView) {
              // your code here
          }
      });
  }
  }
}