0

我制作这样的项目:Fetch Messages from Inbox

部分代码:

while  (cursor.moveToNext()) 
{
    String address = cursor.getString(1);
    String body = cursor.getString(3);

    // Loading too long
    System.out.println("======> Mobile number => "+address);
    System.out.println("=====> SMS Text => "+body);
    sms.add("Address=> "+address+"\n SMS => "+body);   
}
return sms;

但是,信息太多,需要很长时间才能显示出来。在 loding 我想展示动画(progressbar)

谢谢...

4

4 回答 4

2

通常你会在 Android 上使用 AsyncTask 来做这样的事情。

简介:默认情况下,所有不使用线程、服务等编写的代码都将在 UI thread.. 中执行。这意味着如果您在那里进行一些昂贵的工作,用户界面将被阻塞(不响应)。好的做法是将如此昂贵的任务移动到单独的线程,否则您的应用程序将显示ANR对话框并被关闭。

如何:适合您的情况的最佳方法之一是使用AsyncTask .. 基本上在onPreExecute()您显示进度对话框或“正在进行的长时间任务”动画中。在doInBackground(Params... params)您放置昂贵操作的代码。如果您需要更新进度条,您可以从onProgressUpdate(Progress... values). 当昂贵的任务完成时,它将为onPostExecute(Result result)方法提供结果。从此,您可以再次更新 UI 并关闭之前显示的进度对话框。

希望它有所帮助。干杯.. ;)

于 2012-06-11T07:25:07.873 回答
1

使用Asyntask、输入代码doInBackground、开始processbaronPreExecute()关闭onPostExecute()

于 2012-06-11T07:19:36.880 回答
0

在您的项目中实现 Runnable。运行此代码

while  (cursor.moveToNext()) 
{
String address = cursor.getString(1);
String body = cursor.getString(3);

// Loading too long
System.out.println("======> Mobile number => "+address);
System.out.println("=====> SMS Text => "+body);
sms.add("Address=> "+address+"\n SMS => "+body);   
}
//return sms;// Make a global variable which can hold values here...
handler.sendEmptyMessage(0);

run()

方法。现在像这样启动线程:

Thread fetchSmsThread = new Thread(this);
progressDialog = ProgressDialog.show(context,title,message);
fetchSmsThread.start();

处理程序代码:

 Handler handler = new Handler()
 {

  //////Catch Message Here.. and Dismiss dialog...
  ///Note You have to declare progress dialog as global so that you can access it here...

 }

有关 runnable 的进一步帮助,请执行以下操作:

如何在 Android 中运行 Runnable 线程?

如果您不想使用 Runnable,请使用 Android AsynClass,请遵循:

AsyncTask Android 示例

于 2012-06-11T07:18:57.567 回答
0

在 main.xml 中添加一个带有 id 的 Progressbar(下例中的 yourProgressBarId):

@Override  
public void onCreate(Bundle savedInstanceState) {  
    super.onCreate(savedInstanceState);  
    setContentView(R.layout.main);  

    final ListView lViewSMS = (ListView) findViewById(R.id.listViewSMS);  

    final ProgressBar progressBar = (ProgressBar)findViewById(R.id.yourProgressBarId);
    progressBar.setVisibility(View.VISIBLE);
    new Thread(){
        public void run() {

                ArrayList sms =fetchInbox();
                if(sms!=null) 
                lViewSMS.post(new Runnable() {

                    @Override
                    public void run() {
                         ArrayAdapter adapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, sms);  
                         lViewSMS.setAdapter(adapter);  
                         progressBar.setVisibilty(View.GONE);
                }
          });
    }   
}.start();

}  
于 2012-06-11T07:25:39.163 回答