JSON ListView过滤器无法正常工作

时间:2017-12-08 21:16:01

标签: java android json listview search

所以我有一个项目来制作一个简单的工作板应用程序。我已经检索了我的JSON数据,并将其显示在我的应用程序上,但我希望能够使用SearchView过滤器,但我不知道如何从内部类之外访问我的SimpleAdapter

这是我的代码:

public class jobcategories extends Activity{

private TextView jobData;
private ProgressDialog myprocessingdialog;


ArrayAdapter<String> adapter;

ArrayList<HashMap<String, String>> jobList;
private ListView lv;
private SearchView sv;



@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.jobcategories);

    myprocessingdialog = new ProgressDialog(this);

    jobList = new ArrayList<>();

    lv = (ListView) findViewById(R.id.list);

    sv = (SearchView) findViewById(R.id.search);

    sv.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
        @Override
        public boolean onQueryTextSubmit(String text) {
            return false;
        }

        @Override
        public boolean onQueryTextChange(String text) {

            adapter.getFilter().filter(text);

            return false;
        }
    });

    new JSONTask().execute("https://apidata.com");


}


public class JSONTask extends AsyncTask<String,String, String>{

    protected void onPreExecute() {
        // TODO Auto-generated method stub
        super.onPreExecute();

       //Showing Progress dialogue

        myprocessingdialog.setTitle("Please Wait..");
        myprocessingdialog.setMessage("Loading");
        myprocessingdialog.setCancelable(false);
        myprocessingdialog.setIndeterminate(false);
        myprocessingdialog.show();
    }


    @Override
    protected String doInBackground(String... params) {

        HttpURLConnection connection = null;
        BufferedReader reader = null;

        try{
            URL url = new URL(params[0]);
            connection = (HttpURLConnection) url.openConnection();
            connection.connect();

            InputStream stream = connection.getInputStream();
            reader = new BufferedReader(new InputStreamReader(stream));

            StringBuffer buffer = new StringBuffer();
            String line = "";
            while((line = reader.readLine()) != null){
                buffer.append(line);
            }

            String finalJson = buffer.toString();

            JSONArray parentObject = new JSONArray(finalJson);


            for (int i=0; i < parentObject.length(); i++) {
                JSONObject job = parentObject.getJSONObject(i);

                String JobTitle = job.getString("title");
                String JobLocation = job.getString("location");
                String finalTitle = JobTitle + " in " + JobLocation;
                String JobCompany = "advert by "+job.getString("company");
                String JobDescription = job.getString("description");
                String JobApply = "How to Apply: " + job.getString("apply");

                HashMap<String, String> jobs = new HashMap<>();
                jobs.put("title", finalTitle);
                jobs.put("company", JobCompany);
                jobs.put("description", JobDescription);
                jobs.put("apply", JobApply);


                jobList.add(jobs);
            }


        }catch (MalformedURLException e){
            Toast.makeText(getApplicationContext(), "Error...the job server is down..." + e.toString(), Toast.LENGTH_LONG).show();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (JSONException e) {
            Toast.makeText(getApplicationContext(), "error parsing..." + e.toString(), Toast.LENGTH_LONG).show();
        } finally {
            if(connection != null) {
                connection.disconnect();
            }
            try {
                if(reader != null) {
                    reader.close();
                }
            } catch (IOException e) {
                e.printStackTrace();

            }
        }
        return null;
    }

    @Override
    protected void onPostExecute(String results) {
        super.onPostExecute(results);
        myprocessingdialog.cancel();
        ListAdapter adapter = new SimpleAdapter(
                jobcategories.this, jobList,
                R.layout.list_item, new String[]{"title", "company", "description", "apply"},
                new int[]{R.id.title, R.id.company, R.id.description, R.id.apply});

        lv.setAdapter(adapter);

    }
    }
}

任何帮助都会受到赞赏,我对android很新,所以如果我有更好的方法来过滤数据,那么我愿意改变代码。

1 个答案:

答案 0 :(得分:0)

创建一个名为OnJsonResultListener的接口,如下所示:

public interface OnJsonResultListener {
    void onResult(String result);
}

然后让你的Activity / Fragment实现该接口,并使用简单的适配器和那里的结果做任何事情。然后使AsyncTask在构造函数中获取OnJsonResultListener。然后在onPostExecute方法中,调用listener.onResult(results);

这是一种简单的回调方式。