如何在Parse对象中删除而不是重复? [英] How to delete rather than duplicate in Parse object?

查看:91
本文介绍了如何在Parse对象中删除而不是重复?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试从Parse云中删除行(对象).不是删除它,而是复制对象.我正在尝试从我的解析云/数据库中删除selectedPost.我正在AlertDialog中将其删除:

I am trying to delete a Row (an Object) from the Parse cloud. Instead of deleting it duplicates the object. I am trying to delete the selectedPost from my parse cloud/database. I am deleting it in the AlertDialog:

builder.setNeutralButton("DELETE POST", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int id) {
            try {
                selectedPost.delete();
            } catch (ParseException e) {
                e.printStackTrace();
                Log.e("post", "error " + e);
            }
            selectedPost.saveInBackground();
            dialog.dismiss();
        }
    });

MyPostsFragment:

MyPostsFragment:

public class MyPostsFragment extends Fragment {

ListView lv;
ArrayAdapter adapter;
ArrayList<Post> postArrayList;
Post selectedPost;

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View rootView = inflater.inflate(R.layout.fragment_myposts, container, false);

    lv = (ListView) rootView.findViewById(R.id.mypost_listview);
    lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            // clicked on item show post
            selectedPost = postArrayList.get(position);
            Bundle bundle = new Bundle();
            bundle.putParcelable("data", (Parcelable) selectedPost);
            FragmentManager fm = getActivity().getFragmentManager();
            Fragment fragment = new rang.afterflight.fragments.SelectedPostFragment();
            fragment.setArguments(bundle);
            fm.beginTransaction().replace(R.id.content_main, fragment).commit();
        }

    });

    lv.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
        @Override
        public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
            selectedPost = postArrayList.get(position);
            showDialog();
            return true;
        }
    });

    return rootView;
}




@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    ownPost();

    setHasOptionsMenu(true);


}

public void ownPost(){
    ParseQuery<ParseObject> query = ParseQuery.getQuery("Post");

    ParseUser currentUser = ParseUser.getCurrentUser();
    String user = currentUser.getUsername();

    postArrayList = new ArrayList<Post>();

    query.whereEqualTo("username", user);

    query.findInBackground(new FindCallback<ParseObject>() {
        public void done(List<ParseObject> postList, ParseException e) {
            if (e == null) {
                for (ParseObject object : postList) {
                    Post newPost = new Post();
                    newPost.setAirportParse((String) object.get("airport"));
                    newPost.setDateParse((String) object.get("date"));
                    newPost.setTimeParse((String) object.get("time"));
                    newPost.setPersonsParse((String) object.get("persons"));
                    newPost.setAddressParse((String) object.get("address"));
                    newPost.setFlightnrParse((String) object.get("flightnr"));
                    newPost.setUsername((String) object.get("username"));
                    newPost.setImageFile((ParseFile) object.get("profilepic"));
                    newPost.setContactParse((String) object.get("contact"));
                    newPost.setId(object.getObjectId());

                    postArrayList.add(newPost);
                }

                adapter = new ListViewAdapter(getActivity(), R.layout.item_cardview, postArrayList);
                lv.setAdapter(adapter);
            }
        }
    });
}

private void showDialog() {
    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
    LayoutInflater factory = LayoutInflater.from(getActivity());
    final View view = factory.inflate(R.layout.dialog_deletepost, null);

    builder.setView(view);
    builder.setCancelable(false);
    builder.setTitle("Are you sure you want to delete?");
    builder.setPositiveButton("GO BACK", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int id) {
            dialog.dismiss();
        }
    });

    builder.setNeutralButton("DELETE POST", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int id) {
            ParseQuery<ParseObject> query = ParseQuery.getQuery("Post");

            query.whereEqualTo("objectId", selectedPost.getObjectId());

            query.findInBackground(new FindCallback<ParseObject>() {
                public void done(List<ParseObject> postList, ParseException e) {
                    if (e == null) {
                        for (ParseObject post : postList) {
                            post.deleteInBackground();
                        }
                    }
                }
            });
            dialog.dismiss();
        }
    });
    AlertDialog alert = builder.create();
    alert.show();
}
}

帖子:

@ParseClassName("Post")

公共类Post扩展ParseObject实现可序列化,可打包{

public class Post extends ParseObject implements Serializable, Parcelable {

public Post(){
    super();
}

public String getId(){
    return getString("objectId");
}

public void setId(String id){
    put("objectId", id);
}

//////////

public String getUsername(){
    return getString("username");
}

public void setUsername(String username){
    put("username", username);
}



public String getAirportParse(){
    return getString("airport");
}

public void setAirportParse(String airport){
    put("airport", airport);
}

//////////


public String getDateParse(){
    return getString("date");
}

public void setDateParse(String date){
    put("date", date);
}


//////////


public String getTimeParse(){
    return getString("time");
}

public void setTimeParse(String time){
    put("time", time);
}


//////////


public String getPersonsParse(){
    return getString("persons");
}

public void setPersonsParse(String persons){
    put("persons", persons);
}


//////////


public String getAddressParse(){
    return getString("address");
}

public void setAddressParse(String address){
    put("address", address);
}

public String getFlightnrParse(){
    return getString("flightnr");
}

public void setFlightnrParse(String flightnr){
    put("flightnr", flightnr);
}

public String getContactParse(){
    return getString("contact");
}

public void setContactParse(String contact){
    if(contact != null){
        put("contact", contact);
    }
}


public Bitmap getImageFile(){
    Bitmap bmp = null;
    ParseFile image = getParseFile("profilepic");
    if(image != null){
        try {
            byte[] data = image.getData();
            bmp = BitmapFactory.decodeByteArray(data, 0, data.length);
        } catch (ParseException e) {
            e.printStackTrace();
            }
    }
    return bmp;
}

public void setImageFile(ParseFile file) {
    if (file != null) {
        put("profilepic", file);
    }
}


@Override
public int describeContents() {
    return 0;
}

@Override
public void writeToParcel(Parcel dest, int flags) {
}

protected Post(Parcel in) {
}

public static final Parcelable.Creator<Post> CREATOR = new Parcelable.Creator<Post>() {
    public Post createFromParcel(Parcel source) {
        return new Post(source);
    }

    public Post[] newArray(int size) {
        return new Post[size];
    }
};
}

推荐答案

要删除,请尝试根据条件检索该项目并将其删除.我会在Post中添加一个ObjectID属性,然后将其检索并删除.

To delete try retrieving the item based on a criteria and delete it. I would add a ObjectID attribute to Post and retrieve that and delete it.

所以在ownPost()中执行此操作

newPost.setObjectID(object.getObjectId());

设置帖子的objectID之后,您想在长按之后在解析"中再次找到该对象.因此,当您单击删除时,您想要获取对象然后将其删除.

After you set the objectID for a post then you want to find that object again in Parse after you longclick. So when you click delete, you want to get the object and then delete it.

     builder.setNeutralButton("DELETE POST", new DialogInterface.OnClickListener() {
    public void onClick(DialogInterface dialog, int id) {
        try {
            ParseQuery<ParseObject> query = ParseQuery.getQuery("Post");

            query.whereEqualTo("ObjectID", selectedPost.getObjectId());

            query.findInBackground(new FindCallback<ParseObject>() {
                public void done(List<ParseObject> postList, ParseException e) {
                    if (e == null) {
                        for (ParseObject post : postList) {
                            post.deleteInBackground();
                        }
                    }
                }
            });
        } catch (ParseException e) {
            e.printStackTrace();
            Log.e("post", "error " + e);
        }
        dialog.dismiss();
    }
});

这篇关于如何在Parse对象中删除而不是重复?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆