初探异步 AsyncTask
最基本的异步DEMO,AsyncTask实现扫描SD卡指定后缀类型的文件(递归扫描)
package allen.test;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Environment;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
public class TestActivity extends Activity
{
static List<File> txtList;// 文件列表
EditText editText;
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
this.setTitle("异步加载DEMO(扫描SD卡指定后缀文件)");
Button btnPhoto = (Button) findViewById(R.id.button);
editText = (EditText) findViewById(R.id.edittext);
txtList = new ArrayList<File>();
btnPhoto.setOnClickListener(new View.OnClickListener()
{
public void onClick(View v)
{
new AsyncTask<Integer, Integer, String[]>()
{
private ProgressDialog dialog;
protected void onPreExecute()
{
dialog = ProgressDialog.show(TestActivity.this, "",
"正在扫描SD卡,请稍候....");
super.onPreExecute();
}
protected String[] doInBackground(Integer... params)
{
if (!android.os.Environment.getExternalStorageState()
.equals(android.os.Environment.MEDIA_MOUNTED))
{
}
else
{
if (!editText.getText().toString().equals(""))
{
GetFiles(Environment
.getExternalStorageDirectory());
}
}
return null;
}
protected void onPostExecute(String[] result)
{
dialog.dismiss();
if (editText.getText().toString().equals(""))
{
Toast.makeText(TestActivity.this, "请输入有效信息",
Toast.LENGTH_SHORT).show();
}
else
{
Toast.makeText(TestActivity.this, "扫描完毕",
Toast.LENGTH_LONG).show();
Intent in = new Intent();
in.setClass(TestActivity.this, ListOk.class);
TestActivity.this.startActivity(in);
}
super.onPostExecute(result);
}
}.execute(0);
}
});
}
/**
* 获取文件列表
*
* @param filePath
*/
public void GetFiles(File filePath)
{
File[] files = filePath.listFiles();
if (files != null)
{
for (int i = 0; i < files.length; i++)
{
if (files[i].isDirectory())
{
GetFiles(files[i]);
}
else
{
if (files[i].getName().toLowerCase()
.endsWith("." + editText.getText().toString()))
{
txtList.add(files[i]);
}
}
}
}
}
}
显示类
package allen.test;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import android.app.ListActivity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
public class ListOk extends ListActivity
{
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1,
FileToStr(TestActivity.txtList));
setListAdapter(adapter);
}
/**
* 把文件列表转换成字符串
*
* @param f
* @return
*/
public String[] FileToStr(List<File> f)
{
ArrayList<String> listStr = new ArrayList<String>();
for (int i = 0; i < f.size(); i++)
{
String nameString = f.get(i).getName();
listStr.add(nameString);
}
return listStr.toArray(new String[0]);
}
}
main布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<EditText
android:id="@+id/edittext"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:hint="请输入扫描的文件后缀名(例如mp3)" />
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="开始扫描SD卡" />
</LinearLayout>