2

在我的 android 应用程序上,我使用 Parse.com 在线数据库来存储我的数据。在onCreate()我的activity的方法中,我使用了findInBackground()异步加载数据的方法。

findInBackground()方法最初不会重新连接到活动并继续永远运行。但是,如果我单击手机的主页按钮然后重新加载应用程序,该findInBackGround()方法最终会重新连接并加载数据。

我想:

  1. 使该findInBackground()方法与活动重新连接,而无需重新加载应用程序
  2. 在加载数据时显示加载图像(动画 gif ?)。

你们对我的问题有什么建议吗?

预先感谢您的帮助,

亚历克斯

PS:我已经尝试过解析的find()方法。即使它自动与应用程序重新连接,我认为这不是正确的继续方式,因为它会阻塞调用者活动的 UI,直到加载数据。

==================================================== ================================ 我终于找到了我的问题的答案:

  1. 我将用于填充 listView 的代码放在 findCallBack 类的方法中。因此,我确保仅在 findInBackground() 方法完成运行后才使用它的结果。以前,我把填充listView的代码放在findCallBack类的外面,所以即使它在我的代码之后,它实际上是在findInBackground()结束之前执行的,所以没有用。

  2. 对于加载图像,我使用了在此站点上找到的答案,其中包括在适当的时间(在 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:欢迎大家评论:)

4

0 回答 0