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

时间:2018-12-13 11:50:16

标签: java android mongodb mlab

我用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();
    }
}

}

}

1 个答案:

答案 0 :(得分:0)

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

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