[Java] Java Json Filter Android Studio

  • Antworten:1
Roger Schnibli
  • Forum-Beiträge: 1

23.03.2015, 20:03:05 via Website

Hallo zusammen,

Ich bin daran für meine DB auf dem Raspberry ein Android App zu schreiben.
Die Abfrage nach den Daten mit json Funktioniert einwandfrei.
Nun wollte ich einen Filter einbauen und genau da stosse ich an meine grenzen.
Ich währe froh wenn mir jemand helfen könnte....

import android.app.ProgressDialog;

import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.TextView;
import android.widget.Toast;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
/**
* Created by Roger on 11.03.2015.
*/
public class menu4_Fragment extends Fragment {
View rootview;

ListView list;
EditText search;
TextView ver;
TextView name;
TextView api;
Button Btngetdata;
ArrayList<HashMap<String, String>> oslist = new ArrayList<HashMap<String, String>>();
//URL to get JSON Array
private static String url = "link";
//JSON Node Names
private static final String TAG_OS = "android";
private static final String TAG_VER = "AnlagenNr";
private static final String TAG_NAME = "ProjektBezeichnung";
private static final String TAG_API = "ProjektBezeichnung";
JSONArray android = null;
private List<String> originalData = null;
private List<String>filteredData = null;
private ArrayAdapter simpleAdapter;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    rootview = inflater.inflate(R.layout.menu4_layout, container, false);
    final ListView listview = (ListView) rootview.findViewById(R.id.listView1);
    final EditText inputSearch = (EditText) rootview.findViewById(R.id.inputSearch);
    new JSONParse().execute();


    return rootview;
}

private class JSONParse extends AsyncTask<String,  String,  JSONObject> {
    private ProgressDialog pDialog;
    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        //ver = (TextView)rootview.findViewById(R.id.vers);
        name = (TextView)rootview.findViewById(R.id.name);
        api = (TextView)rootview.findViewById(R.id.api);
        pDialog = new ProgressDialog(getActivity());
        pDialog.setMessage("Daten werden Geladen ...");
        pDialog.setIndeterminate(false);
        pDialog.setCancelable(true);
        pDialog.show();
        oslist = new ArrayList<HashMap<String, String>>();

    }
    @Override
    protected JSONObject doInBackground(String... args) {
        JSONParser jParser = new JSONParser();
        // Getting JSON from URL
        JSONObject json = jParser.getJSONFromUrl(url);
        return json;
    }

    @Override
    protected void onPostExecute(JSONObject json) {
        pDialog.dismiss();
        try {
            // Getting JSON Array from URL
            android = json.getJSONArray(TAG_OS);
            for(int i = 0; i < android.length(); i++){
                JSONObject c = android.getJSONObject(i);
                // Storing  JSON item in a Variable
                String ver = c.getString(TAG_VER);
                String name = c.getString(TAG_NAME);
                String api = c.getString(TAG_API);
                // Adding value HashMap key => value
                HashMap<String, String> map = new HashMap<String, String>();
                map.put(TAG_VER, ver);
                map.put(TAG_NAME, name);
                map.put(TAG_API, api);
                oslist.add(map);
                list=(ListView)rootview.findViewById(R.id.listView1);
                search=(EditText)rootview.findViewById(R.id.inputSearch);
                ListAdapter adapter = new SimpleAdapter(getActivity(), oslist,
                        R.layout.list_v,
                        new String[] { TAG_VER,TAG_NAME, TAG_API }, new int[] {
                        R.id.name, R.id.api});
                list.setAdapter(adapter);
 ;
                search.addTextChangedListener(new TextWatcher() {

                    @Override
                    public void onTextChanged(CharSequence cs, int arg1, int arg2, int arg3) {
                        // When user changed the Text
                        menu4_Fragment.this.getActivity().adapter.getFilter().filter(cs);

                    }

                    @Override
                    public void beforeTextChanged(CharSequence arg0, int arg1, int arg2,
                                                  int arg3) {
                        // TODO Auto-generated method stub

                    }

                    @Override
                    public void afterTextChanged(Editable arg0) {
                        // TODO Auto-generated method stub
                    }
                });

                list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                    @Override
                    public void onItemClick(AdapterView<?> parent, View view,
                                            int position, long id) {
                        Toast.makeText(getActivity(), "You Clicked at " + oslist.get(position).get("AnlagenNr"), Toast.LENGTH_SHORT).show();

                    }
                });

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

}
Nun der Fehler:
menu4_Fragment.this.getActivity().adapter.getFilter().filter(cs); ---> Can not resolve symbol 'adapter'

Ich weis einfach nicht mehr weiter -.-

Antworten
Sven R.
  • Forum-Beiträge: 1.904

24.03.2015, 07:09:43 via App

Da die Methode getFilter() anscheinend nur in deinem eigenen Adapter ist, musst du ihn zuerst casten:

((DeinAdapter) adapter).getFilter()...

Edit:

Falsch geguckt.

Activity casten:

((DeineActivity) getActivity).getAdapter()....

Damit du nicht mit der ganzen Activity rumhantieren musst, könntest du auch ein Interface machen (JsonSearchable z.b.)

— geändert am 24.03.2015, 07:13:01

Wenn dir mein Beitrag gefällt, kannst dich einfach mit dem 👍 "Danke"-Button auf der Website dieses Forums bedanken. 😀

Why Java? - Because I can't C#

Antworten