在我的 android 应用程序上,我使用 Parse.com 在线数据库来存储我的数据。在onCreate()
我的activity的方法中,我使用了findInBackground()
异步加载数据的方法。
该findInBackground()
方法最初不会重新连接到活动并继续永远运行。但是,如果我单击手机的主页按钮然后重新加载应用程序,该findInBackGround()
方法最终会重新连接并加载数据。
我想:
- 使该
findInBackground()
方法与活动重新连接,而无需重新加载应用程序 - 在加载数据时显示加载图像(动画 gif ?)。
你们对我的问题有什么建议吗?
预先感谢您的帮助,
亚历克斯
PS:我已经尝试过解析的find()方法。即使它自动与应用程序重新连接,我认为这不是正确的继续方式,因为它会阻塞调用者活动的 UI,直到加载数据。
==================================================== ================================ 我终于找到了我的问题的答案:
我将用于填充 listView 的代码放在 findCallBack 类的方法中。因此,我确保仅在 findInBackground() 方法完成运行后才使用它的结果。以前,我把填充listView的代码放在findCallBack类的外面,所以即使它在我的代码之后,它实际上是在findInBackground()结束之前执行的,所以没有用。
对于加载图像,我使用了在此站点上找到的答案,其中包括在适当的时间(在 findInBackground() 之前和之后)激活和停止 ProgressDialog。
startLoading(); //Show the loading image query.findInBackground(new FindCallback() { public void done(List<ParseObject> allQuestionsVal, ParseException e) { if (e == null) { for(int i = 0; i<=allQuestionsVal.size()-1;i++){ ParseObject questionVal = allQuestionsVal.get(i); Question question = new Question(questionVal.getObjectId(), questionVal.getString("FIELD1"), questionVal.getString("FIELD2"), allQuestions.add(question); } stopLoading(); //Remove the loading image //Use the result of the Query (allQuestions) to populate listVIew ListView list = (ListView) findViewById(R.id.all_questions); AllQuestionsAdapter adapter=new AllQuestionsAdapter(AllQuestions.this, allQuestions); list.setAdapter(adapter); } else { stopLoading(); //Remove the loading image } } });
受保护的 ProgressDialog proDialog;
protected void startLoading() { proDialog = new ProgressDialog(this); proDialog.setMessage("loading..."); proDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER); proDialog.setCancelable(false); proDialog.show(); } protected void stopLoading() { proDialog.dismiss(); proDialog = null; }
PS:欢迎大家评论:)