首页 > 解决方案 > 尝试从 MySQL 数据库创建列表视图时出现解析器错误

问题描述

我正在关注本教程https://www.youtube.com/watch?v=WPJxnQpb_Vk尝试将一些数据库条目显示为列表视图。下载器似乎工作正常并正在调用解析器。我确实在屏幕上看到了解析器的进度对话框,但是解析器本身在执行后返回 0,这会导致弹出错误消息。任何输入表示赞赏。

public class Parser extends AsyncTask<Void,Integer,Integer> {

    Context c;
    String data;
    ListView lvSelectedThesis;

    ArrayList<String> selectedThesis = new ArrayList<>();
    ProgressDialog pd;

    public Parser(Context c, String data, ListView lvSelectedThesis) {
        this.c = c;
        this.data = data;
        this.lvSelectedThesis = lvSelectedThesis;
    }

    @Override
    protected void onPreExecute() {
        super.onPreExecute();

        pd = new ProgressDialog(c);
        pd.setTitle("Parse Data");
        pd.setMessage("Parsing ....Please Wait");
    }

    @Override
    protected Integer doInBackground(Void... params) {

        //return an integer to postexecute
        return this.parse();
    }

    @Override
    protected void onPostExecute(Integer integer) {
        super.onPostExecute(integer);
        if(integer == 1)
        {
            //success
            //adapt data to listview
            ArrayAdapter<String> adapter = new ArrayAdapter<String>(c, android.R.layout.simple_list_item_1,selectedThesis);
            lvSelectedThesis.setAdapter(adapter);

            lvSelectedThesis.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                    Snackbar.make(view,selectedThesis.get(position),Snackbar.LENGTH_SHORT).show();
                }
            });
        }else
        {
            //failure
            Toast.makeText(c,"Unable to parse data",Toast.LENGTH_SHORT).show();
        }

        pd.dismiss();
    }

    //parse received data
    private int parse()
    {

        try
        {
            //add data to json array
            JSONArray ja = new JSONArray(data);
            //create json object to hold a single item
            JSONObject jo = null;

            selectedThesis.clear();

            //look through json array
            for(int i = 0; i < ja.length(); i++)
            {
                jo = ja.getJSONObject(i);

                //retrieve thesis title
                String title = jo.getString("Title");

                //add it to our array list
                selectedThesis.add(title);
            }
        } catch (JSONException e) {
            e.printStackTrace();
        }

        return 0;
    }
}

标签: javaandroidlistview

解决方案


推荐阅读