parse.com更新数据android

parse.com更新数据android,android,parse-platform,Android,Parse Platform,我在parse.com上的类Grillen中有一个包含数据的对象 现在,我希望这样做:如果我单击一个按钮,它将添加到与微调器中所选名称相同的行中,并更新列Betrag和Rechnung。我尝试了下面的代码,但不起作用 public void createRechnung(View v) { ParseQuery<ParseObject> query = ParseQuery.getQuery("Grillen") // Retrieve the object by

我在parse.com上的类
Grillen
中有一个包含数据的对象

现在,我希望这样做:如果我单击一个按钮,它将添加到与微调器中所选名称相同的行中,并更新列
Betrag
Rechnung
。我尝试了下面的代码,但不起作用

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

}
public void createRechnung(视图五){
ParseQuery=ParseQuery.getQuery(“Grillen”)
//按id检索对象
query.getInBackground(String.valueOf(mNameInput),new GetCallback(){
公共无效完成(ParseObject Grillen,Parsee异常){
如果(e==null){
Grillen.put(“Betrag”,输入);
Grillen.put(“Rechnung”,假);
Grillen.saveInBackground();
}
}
});
}

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

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();
        }
    }
});
ParseQuery query=ParseQuery.getQuery(“Grillen”);
//按id检索对象
query.getInBackground(String.valueOf(mNameInput),new GetCallback(){
公共无效完成(ParseObject Grillen、ParseException等){
如果(例如==null){
Grillen.put(“Betrag”,输入);
Grillen.put(“Rechnung”,假);
Grillen.saveInBackground(新的SaveCallback(){
公共作废完成(Parsee异常){
如果(e==null){
//成功,拯救!
Log.d(“MyApp”,“已成功保存!”);
}否则{
//救不了!
e、 printStackTrace();
}
}
});
}否则{
//没能得到!!
例如printStackTrace();
}
}
});
如果您成功保存,那么您的异常为空,如果没有,您将通过stacktrace知道原因。我建议运行这段代码,让应用程序的执行流基于保存是否成功

请阅读:您必须传递要获取的对象的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();
            }
        }
});
ParseQuery query=ParseQuery.getQuery(“Grillen”);
query.whereEqualTo(“name”,String.valueOf(mNameInput));
//按id检索对象
findInBackground(新的FindCallback(){
公共void done(列出对象,例如ParseException){
如果(例如==null&&objects.size()>0){
ParseObject Grillen=objects.get(0);
Grillen.put(“Betrag”,输入);
Grillen.put(“Rechnung”,假);
Grillen.saveInBackground(新的SaveCallback(){
公共作废完成(Parsee异常){
如果(e==null){
//成功,拯救!
Log.d(“MyApp”,“已成功保存!”);
}否则{
//救不了!
e、 printStackTrace();
}
}
});
}否则{
//没能得到!!
例如printStackTrace();
}
}
});

注意:我不知道Grillen对象的“name”属性的列名是什么,因此您可能需要将其更改为该对象的名称列。

好的,我已使用
微调器来处理名称,而不是
编辑文本

这是代码的一部分

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();
                }
            }
        });
    }
公共类RechnungActivity扩展了AppCompatActivity{
私有编辑文本输入;
私有微调器输入;
私有字符串mName;
私有字符串mBetrag;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_rechng);
ParseObject.registerSubclass(Grillen.class);
mBetragInput=(EditText)findViewById(R.id.Sonstiges);
mNameInput=(微调器)findViewById(R.id.Name);
mName=mNameInput.getSelectedItem().toString();
mBetrag=mBetragInput.getText().toString();
}
公共空间createRechnung(视图五){
ParseQuery=ParseQuery.getQuery(“Grillen”);
查询:whereEqualTo(“名称”,mName);
findInBackground(新的FindCallback(){
公共void done(列出对象,例如ParseException){
如果(例如==null&&objects.size()>0){
mBetrag=mBetragInput.getText().toString();
ParseObject Grillen=objects.get(0);
格里伦·普特(“贝特拉格”,姆贝特拉格);
Grillen.put(“Rechnung”,真);
Grillen.saveInBackground(新的SaveCallback(){
公共作废完成(Parsee异常){
如果(e==null){
//成功,拯救!
Log.d(“MyApp”,“已成功保存!”);
}否则{
//救不了!
e、 printStackTrace();
}
}
});
}否则{
//没能得到!!
例如printStackTrace();
}
}
});
}

在您的saveInBackground中添加一个save回调,并检查回调中是否存在异常或错误您是否有一些代码给我我我不明白我是如何做到的Android Studio说无法解析方法printStacktrace();我想它会记录在logcat中。输入错误,应该是printStacktrace()好的,我更正了,但是如果我测试我的应用程序,点击我的按钮,logcat中什么都没有发生,我没有看到错误,但我也没有看到成功