带有 mlab 的简单 Todo android 应用程序不添加或编辑

Simple Todo android app with mlab dont add or edit

我用 android studio 创建了一个应用程序并将其连接到 mLab,该应用程序是一个简单的任务列表(toDo App)。我可以完美地看到 mLab 数据库的记录。问题是我无法编辑或创建新记录。删除完美,如果我删除它们,它们将从应用程序和 mLab 中删除。我没有看到任何可见的错误。 谁能帮我找出错误?

我把我项目的回购留在这里 TodoApp

MainActivity.java

public class MainActivity extends AppCompatActivity {


ListView lstViewItems;
Button btnAdd, btnEdit, btnDelete;
EditText edtItem;
item itemSelected=null;
List<item> items = new ArrayList<item>();


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    lstViewItems = (ListView)findViewById(R.id.lstView);
    btnAdd = (Button)findViewById(R.id.btnAddItem);
    btnEdit = (Button)findViewById(R.id.btnEdit);
    btnDelete = (Button)findViewById(R.id.btnDelete);
    edtItem = (EditText) findViewById(R.id.edtItem);

    //LOAD DATA WHEN APP OPENED
    new GetData().execute(Common.getAddressAPI());

    lstViewItems.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
           itemSelected = items.get(position);
           //SET TEXT TO EDIT TEXT
            edtItem.setText(itemSelected.getItem());
        }
    });



    //ADD EVENT TO BUTTON

    btnAdd.setOnClickListener(new View.OnClickListener(){
        @Override
        public void onClick(View v){
            new PostData(edtItem.getText().toString()).execute(Common.getAddressAPI());
        }
    });
//BECAUSE THIS FUNCTION WE NEED PARAMETER ITEMSELECTED, SO WE NEED SET ITEMSELECTED
    //WHEN USER CLICK ON ITEM IN LISTVIEW
    btnEdit.setOnClickListener(new View.OnClickListener(){
        @Override
        public void onClick(View v){

        }
    });

    btnDelete.setOnClickListener(new View.OnClickListener(){
        @Override
        public void onClick(View v){
            new DeleteData(itemSelected).execute(Common.getAddressSingle(itemSelected));

        }

    });



}

//FUNCTION PROCESS DATA
class GetData extends AsyncTask<String, Void, String>{
    ProgressDialog pd = new ProgressDialog(MainActivity.this);

    @Override
    protected void onPreExecute(){
        super.onPreExecute();
        //Pre process
        pd.setTitle("Please wait...");
        pd.show();
    }

    @Override
    protected String doInBackground(String... params){
        // RUNNING PROCCESS..
        String stream = null;
        String urlString = params[0];

        HTTPDataHandler http = new HTTPDataHandler();
        stream = http.GetHTTPData(urlString);
        return stream;
    }

    @Override
    protected void onPostExecute(String s){
        super.onPostExecute(s);
        //Done process
        //WE WILL USE GSON TO PARSE JSON TO CLASS
        Gson gson = new Gson();
        Type listType = new TypeToken<List<item>>(){}.getType();
        items=gson.fromJson(s,listType); // PARSE TO LIST
        CustomAdapter adapter = new CustomAdapter(getApplicationContext(),items); // CREATE ADAPTER
        lstViewItems.setAdapter(adapter); // SET ADAPTER TO LIST VIEW
        pd.dismiss();
    }
}



// FUNCTION TO ADD NEW ITEM
class PostData extends AsyncTask<String,String,String> {
    ProgressDialog pd = new ProgressDialog(MainActivity.this);
    String item;

    public PostData(String item){
        this.item = item;
    }



    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        pd.setTitle("Please wait...");
        pd.show();
    }

    @Override
    protected String doInBackground(String... params) {
        String urlString = params[0];

        HTTPDataHandler hh = new HTTPDataHandler();
        String json="(\"item\":\""+item+"\")";
        hh.PostHTTPData(urlString,json);
        return "";
    }

    @Override
    protected void onPostExecute(String s) {
        super.onPostExecute(s);


        //REFRESH DATA
        new GetData().execute(Common.getAddressAPI());
        pd.dismiss();
    }
}


// FUNCTION TO EDIT ITEM
class PutData extends AsyncTask<String,String,String> {
    ProgressDialog pd = new ProgressDialog(MainActivity.this);
    String item;

    public PutData(String item){
        this.item = item;
    }



    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        pd.setTitle("Please wait...");
        pd.show();
    }

    @Override
    protected String doInBackground(String... params) {
        String urlString = params[0];

        HTTPDataHandler hh = new HTTPDataHandler();
        String json="(\"item\":\""+item+"\")";
        hh.PutHTTPData(urlString,json);
        return "";
    }

    @Override
    protected void onPostExecute(String s) {
        super.onPostExecute(s);


        //REFRESH DATA
        new GetData().execute(Common.getAddressAPI());
        pd.dismiss();
    }
}

// FUNCTION TO DELETE ITEM
class DeleteData extends AsyncTask<String,String,String> {
    ProgressDialog pd = new ProgressDialog(MainActivity.this);
    item item;

    public DeleteData(item item){
        this.item = item;
    }



    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        pd.setTitle("Please wait...");
        pd.show();
    }

    @Override
    protected String doInBackground(String... params) {
        String urlString = params[0];

        HTTPDataHandler hh = new HTTPDataHandler();
        String json="(\"item\":\""+item.getItem()+"\")";
        hh.DeleteHTTPData(urlString,json);
        return "";
    }

    @Override
    protected void onPostExecute(String s) {
        super.onPostExecute(s);


        //REFRESH DATA
        new GetData().execute(Common.getAddressAPI());
        pd.dismiss();
    }
}

}

}

第一个错误是您发送了错误的 json 格式,因此您需要将其更改为正确的格式,第二个错误是您正在为 id 变量编制索引,但您没有发送它。将 post 方法中的 json 变量更改为:

String json = "{'item' :'" + item + "', 'id' : '"+ UUID.randomUUID().toString() +"'}";