2017-11-23 16 views
0

Imageという名前のテーブルがあります。 私は、画面上のオブジェクトをクリックすると、解析でそれを削除することができます。 この表のユーザーIDはimageuseridで、行のIDはobjectIdです。Parseから特定のオブジェクトを削除するには?

My活動コード:

public class DeletePostsActivity extends AppCompatActivity { 

     private String DELETE_LIST; 
     private ArrayList<ParseObject> delete; 
     private ArrayAdapter<ParseObject> adapter; 
     private ParseQuery<ParseObject> query; 
     private ListView listView; 
     private TextView txtDelete; 
     private ProgressDialogUtils progress; 
     private View parentLayout; 

     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.activity_delete_posts); 
      parentLayout = this.findViewById(android.R.id.content); 

      DELETE_LIST = SaveSharedPreferences.getUserId(this); 
      progress = new ProgressDialogUtils(); 

      txtDelete = (TextView)findViewById(R.id.txtDeleteEmpty); 
      delete = new ArrayList<>(); 
      listView = (ListView)findViewById(R.id.listDelete); 
      adapter = new DeleteAdapter(this, delete); 
      listView.setAdapter(adapter); 

      listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
       @Override 
       public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) { 
        progress.startProgress(getContext()); 
        deleteItem(position); 
       } 
      }); 

      Snackbar.make(parentLayout,getString(R.string.item_click_delete),Snackbar.LENGTH_LONG) 
        .setAction("Action",null).show(); 
     } 

     private void deleteItem(int position) {//how to do this??? 
//How to delete the specific item? 
     } 

     @Override 
     public void onStart() { 
      super.onStart(); 
      getPostsToDelete(); 
     } 

     //catch the posts from user to show 
     private void getPostsToDelete() { 
      progress.startProgress(this); 

      query = ParseQuery.getQuery("Imagem"); 
      query.whereEqualTo("imageuserid", DELETE_LIST); 
      query.orderByDescending("createdAt"); 

      query.findInBackground(new FindCallback<ParseObject>() { 
       @Override 
       public void done(List<ParseObject> objects, ParseException e) { 
        progress.endProgress(getContext()); 
        if (e == null) {//sucesso 

         if (objects.size() > 0) { 
          if (txtDelete.getVisibility() == View.VISIBLE) {//retira o texto da tela se houver catálogo 
           txtDelete.setVisibility(View.GONE); 
          } 
          delete.clear(); 
          for (ParseObject parseObject : objects) { 
           delete.add(parseObject); 
          } 
          adapter.notifyDataSetChanged(); 
         } else { 
          txtDelete.setVisibility(View.VISIBLE);//mostra um texto somente para que a tela não fique em branco 
         } 

        } else {//erro 
         e.printStackTrace(); 
        } 

       } 
      }); 
     } 

     private Context getContext() { 
      return this; 
     } 
    } 

私は、この特定のオブジェクトを削除することはできないんだけど、この質問の助けが必要。 特定の行を削除するにはどうすればよいですか?

+0

てみてください; 'と' parseObject.saveInBackground()を; ' – Yupi

+0

しかし、私いくつかの項目のリストがあります。私は最初のものを削除することはできません、私は特定のクリックアイテムを削除する必要があります。 –

+0

コードが正しく動作していて、foorループに当たった場合、 'delete.add(parseObject);の代わりに' parseObject.deleteInBackground(); 'のために使ってみてください – Yupi

答えて

0

これは私の問題を解決:

deleteItem方法:findFirstInBackground`が、その後 `parseObject.delete()を使用し`を使用する

private void deleteItem(final String objectId, final int position) { 
    AlertDialog.Builder dialog = new AlertDialog.Builder(this); 
    dialog.setTitle(getString(R.string.delete_post_title)) 
      .setMessage(getString(R.string.delete_post_message)) 
      .setPositiveButton(getString(R.string.positive_button), new DialogInterface.OnClickListener() { 
       @Override 
       public void onClick(DialogInterface dialogInterface, int i) { 
        progress.startProgress(getContext()); 
        query = ParseQuery.getQuery("Imagem"); 
        query.whereEqualTo("objectId", objectId); 
        query.findInBackground(new FindCallback<ParseObject>() { 
         @Override 
         public void done(List<ParseObject> objects, ParseException e) { 
          if (e == null) { 
           if (objects.size() > 0) { 
            objects.get(position).deleteInBackground(new DeleteCallback() { 
             @Override 
             public void done(ParseException e) { 
              if (e == null) { 
               progress.endProgress(getContext()); 
               adapter.notifyDataSetChanged(); 
               Toast.makeText(getContext(),getString(R.string.deleted_item),Toast.LENGTH_SHORT).show(); 
               Snackbar.make(parentLayout, getString(R.string.deleted_item), Snackbar.LENGTH_LONG) 
                 .setAction("Action", null).show(); 
               adapter.clear(); 
               getPostsToDelete(); 
              } else { 
               Snackbar.make(parentLayout, getString(R.string.error_to_delete), Snackbar.LENGTH_LONG) 
                 .setAction("Action", null).show(); 
               progress.endProgress(getContext()); 
              } 
             } 
            }); 
           } 
          } else { 
           Snackbar.make(parentLayout, getString(R.string.error_to_delete), Snackbar.LENGTH_LONG) 
             .setAction("Action", null).show(); 
           progress.endProgress(getContext()); 
          } 
         } 
        }); 
       } 
      }) 
      .setNegativeButton(getString(R.string.negative_button), new DialogInterface.OnClickListener() { 
       @Override 
       public void onClick(DialogInterface dialogInterface, int i) { 
        dialogInterface.dismiss(); 
       } 
      }).show(); 
} 
関連する問題