从 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();
具体的错误是:
(R.id.spinner_house);
不是声明
findViewById(R.id.spinner_year);
不是声明
感谢您的帮助,正如我所说的,我是 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
}
});
}
}
}
我正在尝试从三个微调器获取数据,准备 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();
具体的错误是:
(R.id.spinner_house);
不是声明findViewById(R.id.spinner_year);
不是声明
感谢您的帮助,正如我所说的,我是 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
}
});
}
}
}