私のアプリでは、jsonでデータを取得してlistviewに表示することはできますが、今はフィルタリングしたい、それぞれのフィールドに基づいて3つのフィルタを使いたいjsonオブジェクト "estado"。Jsonをフィルタリングしてユーザが望む結果のみを表示する
ユーザーがフィルタをクリックできるアクションバーにメニューがあります。
マイアプローチ:私はandroid:onClick="doC"
を使用して機能をした各メニュー項目の
とそれぞれが1、2または3の整数であり、「S」の値を変更するので、AsyncTaskこの数と実行を取得しますフィルタリングするために異なるタスク。
public void doC(MenuItem item){
Toast.makeText(this, "Concluidas", Toast.LENGTH_LONG).show();
s = 1;
new GetObras().execute();
}
public void doA(MenuItem item){
Toast.makeText(this, "Aguardam Aprovação", Toast.LENGTH_LONG).show();
s = 2;
}
public void doR(MenuItem item){
Toast.makeText(this, "Recusadas", Toast.LENGTH_LONG).show();
s = 3;
}
は、私がこれに関数のシグネチャを変更し受信するには:
protected Void doInBackground(Integer... integers) {
そして、doInBackgroundの内側に私が持っている:
if (s == 0) {
// do this
if (s == 1) {
//do this
}
が、私はエラーを取得していないが、私は、フィルタをクリックした後、彼は進捗アニメーションを表示しますが、リストビューでは何も変わりません。
完全なコードは:
public class MainActivity extends ActionBarActivity implements SearchView.OnQueryTextListener{
private String TAG = MainActivity.class.getSimpleName();
private ProgressDialog pDialog;
private ListView list;
int s;
private static String url = "http://ploran.gear.host/scriptobras6.php";
ArrayList<HashMap<String, String>> obrasList;
ArrayList<HashMap<String, String>> concluidasList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
obrasList = new ArrayList<HashMap<String, String>>();
concluidasList = new ArrayList<HashMap<String, String>>();
list = (ListView)findViewById(R.id.list1);
new GetObras().execute();
list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View view, int position,
long id) {
Log.e("item clicks", "selected: " + position);
Intent intent = new Intent (MainActivity.this, DetailsActivity.class);
intent.putExtra("id", obrasList.get(position).get("Id"));
intent.putExtra("nomeobra", obrasList.get(position).get("nomeObra"));
intent.putExtra("idCliente", obrasList.get(position).get("idCliente"));
intent.putExtra("dataplevantamento", obrasList.get(position).get("DataLevantamento"));
intent.putExtra("datarlevantamento", obrasList.get(position).get("DataRealizacao"));
intent.putExtra("estado", obrasList.get(position).get("Estado"));
intent.putExtra("DataRMateriais", obrasList.get(position).get("DataRMateriais"));
intent.putExtra("DataInicioObra", obrasList.get(position).get("DataInicioObra"));
intent.putExtra("DataConclusao", obrasList.get(position).get("DataConclusao"));
intent.putExtra("DataVestoria\"", obrasList.get(position).get("DataVestoria"));
intent.putExtra("Obs", obrasList.get(position).get("Obs"));
intent.putExtra("Prompor", obrasList.get(position).get("Prompor"));
intent.putExtra("Levantpor", obrasList.get(position).get("Levantpor"));
intent.putExtra("executpor", obrasList.get(position).get("executpor"));
startActivity(intent);
}
});
}
private class GetObras extends AsyncTask<Integer, Void, Void> {
@Override
protected void onPreExecute() {
super.onPreExecute();
// Showing progress dialog
pDialog = new ProgressDialog(MainActivity.this);
pDialog.setMessage("Por favor aguarde ...");
pDialog.setCancelable(false);
pDialog.show();
}
@Override
protected Void doInBackground(Integer... integers) {
HttpHandler sh = new HttpHandler();
// Making a request to url and getting response
String jsonStr = sh.makeServiceCall(url);
Log.e(TAG, "Response from url: " + jsonStr);
JSONArray obras = null;
try {
obras = new JSONArray(jsonStr);
} catch (JSONException e) {
e.printStackTrace();
}
if (s == 0) {
if (jsonStr != null) {
try {
//JSONObject jsonObj = new JSONObject(jsonStr);
// Getting JSON Array node
//JSONArray obras = jsonObj.getJSONArray("obras");
// looping through All
for (int i = 0; i < obras.length(); i++) {
JSONObject c = obras.getJSONObject(i);
String id = c.getString("Id");
String nomeObra = c.getString("NomeObra");
String idCliente = c.getString("idCliente");
String DataLevantamento = c.getString("DataPLevantamento");
String DataRealizacao = c.getString("DataRLevantamento");
String Estado = c.getString("Estado");
String DataMateriais = c.getString("DataRMateriais");
String DataInicioObra = c.getString("DataInicioObra");
String DataConclusao = c.getString("DataConclusao");
String DataVestoria = c.getString("DataVestoria");
String Obs = c.getString("Obs");
String Prompor = c.getString("Prompor");
String Levantpor = c.getString("Levantpor");
String executpor = c.getString("executpor");
// tmp hash map for single contact
HashMap<String, String> obra = new HashMap<>();
// adding each child node to HashMap key => value
obra.put("Id", id);
obra.put("nomeObra", nomeObra);
obra.put("idCliente", idCliente);
obra.put("DataLevantamento", DataLevantamento);
obra.put("DataRealizacao", DataRealizacao);
obra.put("Estado", Estado);
obra.put("DataMateriais", DataMateriais);
obra.put("DataIncioObra", DataInicioObra);
obra.put("DataConclusao", DataConclusao);
obra.put("DataVestoria", DataVestoria);
obra.put("Obs", Obs);
obra.put("Prompor", Prompor);
obra.put("Levantpor", Levantpor);
obra.put("executpor", executpor);
// adding contact to contact list
obrasList.add(obra);
}
} catch (final JSONException e) {
Log.e(TAG, "Json parsing error: " + e.getMessage());
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(getApplicationContext(),
"Json parsing error: " + e.getMessage(),
Toast.LENGTH_LONG)
.show();
}
});
}
} else {
Log.e(TAG, "Couldn't get json from server.");
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(getApplicationContext(),
"Couldn't get json from server. Check LogCat for possible errors!",
Toast.LENGTH_LONG)
.show();
}
});
}
}
if (s == 1) {
JSONObject object = null;
for (int i = 0; i < obras.length(); i++) {
try {
object = obras.getJSONObject(i);
} catch (JSONException e) {
e.printStackTrace();
}
try {
if (object.getString("Estado") == "Obra Concluída") {
JSONObject c = obras.getJSONObject(i);
String id = c.getString("Id");
String nomeObra = c.getString("NomeObra");
String idCliente = c.getString("idCliente");
String DataLevantamento = c.getString("DataPLevantamento");
String DataRealizacao = c.getString("DataRLevantamento");
String Estado = c.getString("Estado");
String DataMateriais = c.getString("DataRMateriais");
String DataInicioObra = c.getString("DataInicioObra");
String DataConclusao = c.getString("DataConclusao");
String DataVestoria = c.getString("DataVestoria");
String Obs = c.getString("Obs");
String Prompor = c.getString("Prompor");
String Levantpor = c.getString("Levantpor");
String executpor = c.getString("executpor");
// tmp hash map for single contact
HashMap<String, String> obra = new HashMap<>();
// adding each child node to HashMap key => value
obra.put("Id", id);
obra.put("nomeObra", nomeObra);
obra.put("idCliente", idCliente);
obra.put("DataLevantamento", DataLevantamento);
obra.put("DataRealizacao", DataRealizacao);
obra.put("Estado", Estado);
obra.put("DataMateriais", DataMateriais);
obra.put("DataIncioObra", DataInicioObra);
obra.put("DataConclusao", DataConclusao);
obra.put("DataVestoria", DataVestoria);
obra.put("Obs", Obs);
obra.put("Prompor", Prompor);
obra.put("Levantpor", Levantpor);
obra.put("executpor", executpor);
// adding contact to contact list
obrasList.add(obra);
}
} catch (JSONException e) {
e.printStackTrace();
}
}
}
return null;
}
@Override
protected void onPostExecute (Void result){
super.onPostExecute(result);
// Dismiss the progress dialog
if (pDialog.isShowing())
pDialog.dismiss();
/**
* Updating parsed JSON data into ListView
* */
ListAdapter adapter = new SimpleAdapter(
MainActivity.this, obrasList,
R.layout.list_item, new String[]{"nomeObra", "idCliente",
"Estado"}, new int[]{R.id.name,
R.id.email, R.id.mobile});
list.setAdapter(adapter);
if(pDialog.isShowing()) { pDialog.hide(); }
}
}
List<String> cities;
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.options, menu);
return true;
}
@Override
public boolean onQueryTextSubmit(String query) {
// User pressed the search button
return false;
}
@Override
public boolean onQueryTextChange(String newText) {
// User changed the text
return false;
}
public void doC(MenuItem item){
Toast.makeText(this, "Concluidas", Toast.LENGTH_LONG).show();
s = 1;
new GetObras().execute();
}
public void doA(MenuItem item){
Toast.makeText(this, "Aguardam Aprovação", Toast.LENGTH_LONG).show();
s = 2;
}
public void doR(MenuItem item){
Toast.makeText(this, "Recusadas", Toast.LENGTH_LONG).show();
s = 3;
}
}
このようなものはすべて 'doC' – AJay
ですが、私はdoCでやっています。 – BugDroid777
ちょうどそれを試して、それがどうなるか教えてください^^ –