带有 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() +"'}";
我用 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() +"'}";