json listview删除不工作的android工作室

时间:2017-06-22 22:13:28

标签: android json listview

我正在将一些json加载到列表视图中,并希望在单击时从列表中删除项目,并从json中删除项目。删除功能似乎正在起作用。调用方法delete,单击时删除项目,调试显示正在删除的项目。但是,在转到另一个活动并再次查看列表后,已删除的项目将返回。我究竟做错了什么?这是我的班级:

public class edit extends AppCompatActivity 
{

    public ListView pizzaList;
    ListView addicList;
    ArrayAdapter<String> arrayAdapter;
    String appreciations;
    String currentPizza;
    ArrayList<String> list = new ArrayList<String>();
    private String name;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.edit_activity);
        pizzaList = (ListView) findViewById(R.id.pizzas);
        registerForContextMenu(pizzaList);

        arrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, list);
        pizzaList.setAdapter(arrayAdapter);

        pizzaList.setOnItemClickListener(new AdapterView.OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                delete(view,position);
                arrayAdapter.notifyDataSetChanged();
            }
        });

        try {
            FileManager fileManager = new FileManager();

            String str = fileManager.ReadFile(this);

            if (str != null) {
                JSONArray jarray = new JSONArray(str);

                String outputText = "";

                for (int i = 0; i < jarray.length(); i++) {
                    JSONObject jsonObject = jarray.getJSONObject(i);
                    String pizzaName = jsonObject.getString("name");
                    int price = jsonObject.getInt("price");

                    outputText = outputText + " " + pizzaName + "  " + " $" + price + "\n";

                    appreciations = outputText;
                    list.add(appreciations);

                    arrayAdapter.notifyDataSetChanged();
                    outputText = "";
                }
            } else {
                Toast to = Toast.makeText(getApplicationContext(), "No saved Pizzas", Toast.LENGTH_LONG);
                to.show();
            }
        } catch (JSONException e) {
            e.printStackTrace();
        }
    }

    public void delete(View view, int pos)
    {
        try {
            FileManager fileManager = new FileManager();

            String str = fileManager.ReadFile(this);

            if (str != null) 
            {
                JSONArray jarray = new JSONArray(str);

                JSONObject jsonObject = jarray.getJSONObject(pos);

                jarray.remove(pos);
                list.remove(pos);
                arrayAdapter.notifyDataSetChanged();

                JSONArray jsArray = new JSONArray(jarray);
                arrayAdapter.notifyDataSetChanged();

            } else {
                Toast to = Toast.makeText(getApplicationContext(), "No saved Pizzas", Toast.LENGTH_LONG);
                to.show();
            }
        } catch (JSONException e) {
            e.printStackTrace();
        }
    }
}

1 个答案:

答案 0 :(得分:0)

您需要从数据库中删除该项,使用异常请求(例如volley或robospice)。然后,在返回时不再发出请求,而是第二次使用存储在缓存中的数据,并且仅在数据更改时再次发出请求。您可以在应用程序类中创建缓存逻辑,以使其在整个应用程序中可见。