Как фильтровать и заполнять второй счетчик на основе первого счетчика с помощью PHP и MySQL на Android

Помогите, пожалуйста! Как использовать два спиннера на андроиде, чтобы данные второго спиннера фильтровались первым спиннером с PHP & MySQL. я уже установил второй php url для фильтрации данных, но я понятия не имею, как заполнить второй счетчик doInBackground ,populateSpinner, onItemSelected и т.п.

public class MainActivity extends Activity implements OnItemSelectedListener {

private Spinner spinnerFood;
private Spinner spinnerFood2;
// array list for spinner adapter
private ArrayList<Category> categoriesList;
private ArrayList<Category> categoriesList2;
ProgressDialog pDialog;
int kabupaten;
// API urls
// Url to get all categories
private String URL_CATEGORIES = "http://192.168.1.88/android_spinnner/get_categories.php";
private String URL_CATEGORIES2 = "http://192.168.1.88/android_spinnner/get_kelurahan.php?id_kabupaten=";
private String URL2 = URL_CATEGORIES2+kabupaten;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
spinnerFood = (Spinner) findViewById(R.id.spinFood);
spinnerFood2 = (Spinner) findViewById(R.id.spinner2);
spinnerFood2.setEnabled(false);
categoriesList = new ArrayList<Category>();
categoriesList2 = new ArrayList<Category>();

// spinner item select listener
spinnerFood.setOnItemSelectedListener(this);
spinnerFood2.setOnItemSelectedListener(this);

new GetCategories().execute();
}

/**
* Adding spinner data
* */
private void populateSpinner() {
List<String> lables = new ArrayList<String>();

for (int i = 0; i < categoriesList.size(); i++) {
lables.add(categoriesList.get(i).getName());
}

// Creating adapter for spinner
ArrayAdapter<String> spinnerAdapter = new ArrayAdapter<String>(this,
android.R.layout.simple_spinner_item, lables);

// Drop down layout style - list view with radio button
spinnerAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

// attaching data adapter to spinner
spinnerFood.setAdapter(spinnerAdapter);
}

/**
* Async task to get all food categories
* */
private class GetCategories extends AsyncTask<Void, Void, Void> {

@Override
protected void onPreExecute() {
super.onPreExecute();
pDialog = new ProgressDialog(MainActivity.this);
pDialog.setMessage("Fetching food categories..");
pDialog.setCancelable(false);
pDialog.show();
}
protected Void doInBackground(Void... arg0) {
ServiceHandler jsonParser = new ServiceHandler();
String json = jsonParser.makeServiceCall(URL_CATEGORIES, ServiceHandler.GET);

Log.e("Response: ", "> " + json);

if (json != null) {
try {
JSONObject jsonObj = new JSONObject(json);
if (jsonObj != null) {
JSONArray categories = jsonObj
.getJSONArray("categories");

for (int i = 0; i < categories.length(); i++) {
JSONObject catObj = (JSONObject) categories.get(i);
Category cat = new Category(catObj.getInt("id"),
catObj.getString("name"));
categoriesList.add(cat);
}
}

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

} else {
Log.e("JSON Data", "Didn't receive any data from server!");
}

return null;
}

@Override
protected void onPostExecute(Void result) {
super.onPostExecute(result);
if (pDialog.isShowing())
pDialog.dismiss();
populateSpinner();
}
}

@Override
public void onItemSelected (AdapterView < ? > parent, View view,int position,
long id){
Toast.makeText(
getApplicationContext(),
parent.getItemAtPosition(position).toString() + " Selected",
Toast.LENGTH_LONG).show();
kabupaten = categoriesList.get(position).getId();
spinnerFood2.setEnabled(true);

}

@Override
public void onNothingSelected (AdapterView < ? > arg0){
}
}

0

Решение

Поскольку вы установили OnItemSelectedListener для обоих счетчиков в одном классе, у меня есть следующие предложения для вас.

Сначала внутри onItemSelectedListener у вас есть представление параметров. Используя это, найдите Id (view.getId ()) и найдите, какой это спиннер. Если это первый счетчик, запустите другой AsyncTask, чтобы получить элементы для второго счетчика.

Еще одно предложение,
В асинхронной задаче Вместо использования void используйте параметр для отправки URL-адреса, для которого вы выбираете результат, чтобы вы могли повторно использовать один и тот же код для извлечения деталей для обоих счетчиков.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]