Android parse.com调用.save()会导致所有查询停止工作
我有两个对象,一个属于可以投票的交易对象的建立对象。如果我多次向上/向下投票相同的交易,那么第七次投票时,该查询只是停留在那里,没有做任何事情。应用程序不会崩溃,但也不会保存。如果我进入另一个需要parse.com查询的活动,该查询也将不起作用。这是我的向上投票逻辑(向下投票是相同的)。 假设所有使用的变量都是在onCreate()之前初始化的。 我的问题是否被备份到某个管道中Android parse.com调用.save()会导致所有查询停止工作,android,database,android-asynctask,parse-platform,Android,Database,Android Asynctask,Parse Platform,我有两个对象,一个属于可以投票的交易对象的建立对象。如果我多次向上/向下投票相同的交易,那么第七次投票时,该查询只是停留在那里,没有做任何事情。应用程序不会崩溃,但也不会保存。如果我进入另一个需要parse.com查询的活动,该查询也将不起作用。这是我的向上投票逻辑(向下投票是相同的)。 假设所有使用的变量都是在onCreate()之前初始化的。 我的问题是否被备份到某个管道中 @Override protected void onCreate(Bundle savedInstanceS
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
upVoteButton = (Button) findViewById(R.id.deal_up_vote_button);
upVoteButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
new UpVoteTask().execute();
}
});
}
// visually changes buttons if they are selected
private void setButtons(Boolean queryDb) {
if (queryDb == true) {
queryParse();
}
// if deal found correctly
if (deal != null) {
// if user found correctly
if (dealVoteUser != null) {
if (dealVoteUser.get("vote").toString().equals("0")) {
upVoteButton.setPressed(false);
downVoteButton.setPressed(true);
} else if (dealVoteUser.get("vote").toString().equals("1")) {
upVoteButton.setPressed(true);
downVoteButton.setPressed(false);
} else if (dealVoteUser.get("vote").toString().equals("2")) {
upVoteButton.setPressed(false);
downVoteButton.setPressed(false);
}
}
}
}
// queries parse and populates vars
private void queryParse(){
ParseQuery<ParseObject> queryDeal = ParseQuery.getQuery("Deal");
queryDeal.whereEqualTo("objectId", deal_id);
try {
deal = queryDeal.getFirst();
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
ParseQuery<ParseObject> queryDealVoteUser = ParseQuery
.getQuery("deal_vote_users");
queryDealVoteUser.whereEqualTo("deal", deal).whereEqualTo("user",
ParseUser.getCurrentUser());
try {
dealVoteUser = queryDealVoteUser.getFirst();
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
// UpVoteTask AsyncTask
private class UpVoteTask extends AsyncTask<Void, Void, Void> {
@Override
protected void onPreExecute() {
super.onPreExecute();
// Create a progressdialog
if(upVoteProgressDialog != null){
upVoteProgressDialog.dismiss();
upVoteProgressDialog = null;
}
upVoteProgressDialog = new ProgressDialog(DealsDetailsActivity.this);
// Set progressdialog message
upVoteProgressDialog.setMessage("Saving...");
upVoteProgressDialog.setIndeterminate(false);
// Show progressdialog
upVoteProgressDialog.show();
}
@Override
protected Void doInBackground(Void... params) {
queryParse();
// if deal found correctly
if (deal != null) {
// if user has not voted yet
if (dealVoteUser == null) {
// create new and assign vote to 1
dealVoteUser = new ParseObject("deal_vote_users");
dealVoteUser.put("deal", deal);
dealVoteUser.put("user", ParseUser.getCurrentUser());
dealVoteUser.put("vote", 1);
up_votes = deal.getInt("up_votes") + 1;
down_votes = deal.getInt("down_votes");
// if user already down voted
} else if (dealVoteUser.get("vote").toString().equals("0")) {
// change vote to 1
dealVoteUser.put("vote", 1);
up_votes = deal.getInt("up_votes") + 1;
down_votes = deal.getInt("down_votes") - 1;
// if user already up voted
} else if (dealVoteUser.get("vote").toString().equals("1")) {
// already voted up, remove vote
dealVoteUser.put("vote", 2);
up_votes = deal.getInt("up_votes") - 1;
down_votes = deal.getInt("down_votes");
// if user already voted but cleared vote
} else if (dealVoteUser.get("vote").toString().equals("2")) {
// change vote to 1
dealVoteUser.put("vote", 1);
up_votes = deal.getInt("up_votes") + 1;
down_votes = deal.getInt("down_votes");
}
// calculate overall rating percentage
if ((up_votes + down_votes) != 0) {
rating = (up_votes / (up_votes + down_votes)) * 100;
} else if ((up_votes == 0) && (down_votes == 0)) {
rating = 0;
} else {
rating = 50;
}
deal.put("rating", rating);
deal.put("up_votes", up_votes);
try {
deal.save();
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
dealVoteUser.save();
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} else {
// deal not found problem
}
return null;
}
@Override
protected void onPostExecute(Void result) {
// visually change buttons without querying db
setButtons(false);
//remove progress dialogue
if(upVoteProgressDialog != null){
upVoteProgressDialog.dismiss();
upVoteProgressDialog = null;
}
}
}
@覆盖
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
upVoteButton=(按钮)findViewById(R.id.deal\u up\u vote\u按钮);
setOnClickListener(新的OnClickListener(){
@凌驾
公共void onClick(视图arg0){
新建UpVoteTask().execute();
}
});
}
//如果选择了按钮,则可视地更改按钮
专用无效设置按钮(布尔查询DB){
if(queryDb==true){
queryParse();
}
//如果交易发现正确
if(交易!=null){
//如果用户正确找到
if(dealVoteUser!=null){
if(dealVoteUser.get(“投票”).toString().equals(“0”)){
向上votebutton.setPressed(假);
设置按下按钮(真);
}else if(dealVoteUser.get(“投票”).toString().equals(“1”)){
upVoteButton.setPressed(真);
设置按下按钮(假);
}else if(dealVoteUser.get(“投票”).toString().equals(“2”)){
向上votebutton.setPressed(假);
设置按下按钮(假);
}
}
}
}
//查询解析并填充变量
私有void queryParse(){
ParseQuery queryDeal=ParseQuery.getQuery(“交易”);
queryDeal.WHEREQUALTO(“目标”,交易id);
试一试{
deal=queryDeal.getFirst();
}捕获(解析异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
ParseQuery QueryDalvoteUser=ParseQuery
.getQuery(“交易/投票/用户”);
queryDealVoteUser.WHEREQUALTO(“交易”),deal.WHEREQUALTO(“用户”,
ParseUser.getCurrentUser());
试一试{
dealVoteUser=querydelvoteuser.getFirst();
}捕获(解析异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
}
//UpVoteTask异步任务
私有类UpVoteTask扩展了异步任务{
@凌驾
受保护的void onPreExecute(){
super.onPreExecute();
//创建一个progressdialog
if(upVoteProgressDialog!=null){
upVoteProgressDialog.disclose();
upVoteProgressDialog=null;
}
upVoteProgressDialog=新建进度对话框(DealsDetailsActivity.this);
//设置进程对话框消息
setMessage(“正在保存…”);
upVoteProgressDialog.setUndeterminate(false);
//显示进度对话框
upVoteProgressDialog.show();
}
@凌驾
受保护的Void doInBackground(Void…参数){
queryParse();
//如果交易发现正确
if(交易!=null){
//如果用户尚未投票
if(dealVoteUser==null){
//新建并将投票权分配给1
dealVoteUser=新的ParseObject(“deal_vote_users”);
交易商。卖出(“成交”,成交);
dealVoteUser.put(“user”,ParseUser.getCurrentUser());
交易商卖出价(“投票”,1);
向上投票=deal.getInt(“向上投票”)+1;
down_voces=deal.getInt(“down_voces”);
//如果用户已经投了反对票
}else if(dealVoteUser.get(“投票”).toString().equals(“0”)){
//将投票改为1票
交易商卖出价(“投票”,1);
向上投票=deal.getInt(“向上投票”)+1;
down_voces=deal.getInt(“down_voces”)-1;
//如果用户已经投票
}else if(dealVoteUser.get(“投票”).toString().equals(“1”)){
//已经投票通过,取消投票
交易商卖出价(“投票”,2);
向上投票=deal.getInt(“向上投票”)-1;
down_voces=deal.getInt(“down_voces”);
//如果用户已投票但未通过投票
}else if(dealVoteUser.get(“投票”).toString().equals(“2”)){
//将投票改为1票
交易商卖出价(“投票”,1);
向上投票=deal.getInt(“向上投票”)+1;
down_voces=deal.getInt(“down_voces”);
}
//计算整体评级百分比
如果((上升票+下降票)!=0){
评级=(上升票/(上升票+下降票))*100;
}如果((上升票==0)和&(下降票==0)){
评级=0;
}否则{
评级=50;
}
交易卖出(“评级”,评级);
交易。提交(“投赞成票”,投反对票);
试一试{
deal.save();
}捕获(解析异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
试一试{
交易商