parse.com更新数据android

时间:2015-09-30 15:57:59

标签: android parse-platform

我在班级Grillen的parse.com上有一个带有数据的对象。

现在我想这样做,如果我点击一个按钮,它会添加到与微调器中选择的名称相同的行,并更新列BetragRechnung。我尝试了以下代码,但它不起作用。

 public void createRechnung(View v) {
    ParseQuery<ParseObject> query = ParseQuery.getQuery("Grillen")
    // Retrieve the object by id
    query.getInBackground(String.valueOf(mNameInput), new GetCallback<ParseObject>() {
        public void done(ParseObject Grillen, ParseException e) {
            if (e == null) {
                Grillen.put("Betrag", mBetragInput);
                Grillen.put("Rechnung", false);
                Grillen.saveInBackground();
            }
        }
    });

}

2 个答案:

答案 0 :(得分:0)

使用此代码检查出现了什么问题

ParseQuery<ParseObject> query = ParseQuery.getQuery("Grillen");

// Retrieve the object by id
query.getInBackground(String.valueOf(mNameInput), new GetCallback<ParseObject>() {
    public void done(ParseObject Grillen, ParseException eg) {
        if (eg == null) {
            Grillen.put("Betrag", mBetragInput);
            Grillen.put("Rechnung", false);
            Grillen.saveInBackground(new SaveCallback() {
                public void done(ParseException e) {
                    if (e == null) {
                       //success, saved!
                       Log.d("MyApp", "Successfully saved!");
                    } else {
                       //fail to save!
                       e.printStackTrace();
                    }
                }
            });
        }else {
            //fail to get!!
            eg.printStackTrace();
        }
    }
});

如果您成功保存,那么您的异常为空,如果不成功,您将知道为什么通过堆栈跟踪。我建议运行此代码,让应用程序的执行流程取决于保存是否成功。

阅读本文:getInBackground(String, callback) 您必须传递您想要获取的对象的objectId,而不是名称。确保你是通过ObjectID获取的,而不是你正在做的名字。 ObjectId看起来像一个随机字符串,应该通过在线查看Parse

在您的数据库中找到

请改为:

    ParseQuery<ParseObject> query = ParseQuery.getQuery("Grillen");
    query.whereEqualTo("name", String.valueOf(mNameInput));

    // Retrieve the object by id
    query.findInBackground(new FindCallback<ParseObject>() {
        public void done(List<ParseObject> objects, ParseException eg) {
            if (eg == null && objects.size() > 0) {
                ParseObject Grillen = objects.get(0);
                Grillen.put("Betrag", mBetragInput);
                Grillen.put("Rechnung", false);
                Grillen.saveInBackground(new SaveCallback() {
                    public void done(ParseException e) {
                        if (e == null) {
                            //success, saved!
                            Log.d("MyApp", "Successfully saved!");
                        } else {
                            //fail to save!
                            e.printStackTrace();
                        }
                    }
                });
            }else {
                //fail to get!!
                eg.printStackTrace();
            }
        }
});

注意:我不知道Grillen对象的'name'属性的列名是什么,因此您可能需要将其更改为您为该对象命名为name列的任何内容。 / p>

答案 1 :(得分:0)

好的,我已经让Spinner为名称而不是EditText

这是代码的一部分

public class RechnungActivity extends AppCompatActivity {


    private EditText mBetragInput;
    private Spinner mNameInput;
    private String mName;
    private String mBetrag;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_rechnung);
        ParseObject.registerSubclass(Grillen.class);

        mBetragInput = (EditText) findViewById(R.id.Sonstiges);
        mNameInput = (Spinner) findViewById(R.id.Name);
        mName = mNameInput.getSelectedItem().toString();
        mBetrag = mBetragInput.getText().toString();
    }

    public void createRechnung(View v) {
        ParseQuery<ParseObject> query = ParseQuery.getQuery("Grillen");
        query.whereEqualTo("name", mName);
        query.findInBackground(new FindCallback<ParseObject>() {
            public void done(List<ParseObject> objects, ParseException eg) {
                if (eg == null && objects.size() > 0) {
                    mBetrag = mBetragInput.getText().toString();
                    ParseObject Grillen = objects.get(0);
                    Grillen.put("Betrag", mBetrag);
                    Grillen.put("Rechnung", true);
                    Grillen.saveInBackground(new SaveCallback() {
                        public void done(ParseException e) {
                            if (e == null) {
                                //success, saved!
                                Log.d("MyApp", "Successfully saved!");
                            } else {
                                //fail to save!
                                e.printStackTrace();
                            }
                        }
                    });
                }else {
                    //fail to get!!
                    eg.printStackTrace();
                }
            }
        });
    }