2016-11-18 32 views
0

在我的應用程序中,我可以在json中獲取數據並將其顯示在列表視圖上,但是現在我想過濾,我希望根據每個字段的3個不同過濾器json對象「estado」。過濾Json只顯示用戶想要的結果

我有操作欄上的菜單,用戶可以點擊過濾器。

我的方法:

對於我沒有使用android:onClick="doC"的函數,並且每一個改變整數的「s」的爲1,2或3中的值中的每個菜單項的,所以的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

只是嘗試它,並告訴我們它是怎麼回事^^ –