如何为JSON填充的Android Spinner添加‘请选择’错误提示
Hey there! Let's get this validation working smoothly for your Spinners. Since your JSON data already includes "Please select" as the first item, we just need to add checks in two key spots: when the user selects an item and when they hit the upload button (to stop accidental invalid submissions).
Step 1: Add Validation to Spinner Selection Listeners
Update both Spinner's OnItemSelectedListener to detect when the user picks the "Please select" option, then show a clear error prompt. We'll also reset the selected value to avoid passing invalid data to your URL builder.
Modified Spinner 1 Listener
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> adapterView, View view, int position, long l) { String selectedItem = spinner.getItemAtPosition(position).toString(); Toast.makeText(getApplicationContext(), selectedItem, Toast.LENGTH_LONG).show(); // Check if selected item is the default "Please select" option if (position == 0) { Item = ""; // Reset to empty to prevent invalid URL parameters Toast.makeText(getApplicationContext(), "Please choose a valid category", Toast.LENGTH_SHORT).show(); } else { Item = selectedItem; } } @Override public void onNothingSelected(AdapterView<?> adapterView) {} });
Modified Spinner 2 Listener
spinner2.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> adapterView, View view, int position, long l) { String selectedItem = spinner2.getItemAtPosition(position).toString(); Toast.makeText(getApplicationContext(), selectedItem, Toast.LENGTH_LONG).show(); // Check if selected item is the default "Please select" option if (position == 0) { Item2 = ""; // Reset to empty Toast.makeText(getApplicationContext(), "Please choose a valid client name", Toast.LENGTH_SHORT).show(); } else { Item2 = selectedItem; } } @Override public void onNothingSelected(AdapterView<?> adapterView) {} });
Step 2: Add Final Validation to Upload Button
Even if users see the selection prompt, they might still try to upload without picking a valid option. Add a check in your onClick method to block uploads until both Spinners have valid selections:
@Override public void onClick(View v) { if (v.getId() == R.id.upload) { // Validate both spinners have valid selections boolean isCategoryValid = !Item.isEmpty() && !Item.equals("Please select"); boolean isClientValid = !Item2.isEmpty() && !Item2.equals("Please select"); if (!isCategoryValid) { Toast.makeText(this, "Please select a valid category first", Toast.LENGTH_SHORT).show(); return; } if (!isClientValid) { Toast.makeText(this, "Please select a valid client name first", Toast.LENGTH_SHORT).show(); return; } // Proceed with your existing upload logic here // (Re-generate your myURL with valid Item/Item2 values before upload) Uri.Builder builder = new Uri.Builder(); // ... rest of your URL builder code ... myURL = builder.build().toString(); // ... upload implementation ... } else if (v.getId() == R.id.fromCamera) { // Your existing camera logic } else if (v.getId() == R.id.fromGallery) { // Your existing gallery logic } }
Step 3: Fix a Minor URL Construction Bug
I noticed a small mistake in your onCreate method where you used builder.build() instead of builder2.build() for URL2. Fix this to ensure your second Spinner loads data from the correct endpoint:
// Original incorrect line: // URL2=builder.build().toString(); // Corrected line: URL2=builder2.build().toString();
Quick Explanation
- Spinner Selection Checks: By targeting position 0 (the first item from your JSON), we immediately alert users to pick a valid option and reset the selected value to avoid invalid URL parameters.
- Upload Button Guard: This acts as a final safety net to stop upload attempts with invalid selections, even if users somehow bypass the selection prompts.
- Bug Fix: Ensures your second Spinner fetches data from the
app-clients.aspendpoint instead of reusing the first Spinner's endpoint.
内容的提问来源于stack exchange,提问作者Ruben Meiring

