2016-11-18 5 views
0

私のアプリでは、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; 
    } 
} 

答えて

1

毎回あなたがフィルタの整数を変更するメニューからメソッドでフィルタを変更しかし、あなたは二度とAsyncTaskを呼び出すいけない、)(新しいGetObrasを入れて実行します。 (); 'doA'と 'doR'

+0

このようなものはすべて 'doC' – AJay

+0

ですが、私はdoCでやっています。 – BugDroid777

+0

ちょうどそれを試して、それがどうなるか教えてください^^ –

関連する問題