我是android开发的初学者,我正在做一个项目,为此我需要使用异步任务将PDF文件从URL下载到我的手机,我还需要在下载文件时显示进度对话框。
这是我的 MainActivity.java 的运行方式..
public class MainActivity extends Activity {
String[] listItem;
String[] listItemURLs;
ProgressDialog mProgressDialog;
ListView lv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.diff_view1);
// instantiate it within the onCreate method
mProgressDialog = new ProgressDialog(MainActivity.this);
mProgressDialog.setMessage("Downloading file..please wait.");
mProgressDialog.setIndeterminate(false);
mProgressDialog.setMax(100);
mProgressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
listItem = new String[] { "File 1", "File 2", "File 3", "File 4",
"File 5", "File 6", "File 7" };
listItemURLs = new String[] { "http://www.ztsinc.com/MBTLA2_ds.pdf",
"http://www.ztsinc.com/MBT1_ds.pdf",
"http://www.ztsinc.com/MINIMBT_ds.pdf",
"http://www.ztsinc.com/MINI9R_ds.pdf",
"http://www.ztsinc.com/MBTLA2_OI.pdf",
"http://www.ztsinc.com/MBT1_OI.pdf",
"http://www.ztsinc.com/MINIMBT_MINI9R_OI.pdf" };
lv = (ListView) findViewById(R.id.listview1);
lv.setAdapter(new ArrayAdapter<String>(MainActivity.this,
android.R.layout.simple_list_item_1, listItem));
lv.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, final View view,
final int position, long id) {
AlertDialog.Builder da = new AlertDialog.Builder(
MainActivity.this);
da.setMessage("Do you want to download this file?");
da.setPositiveButton("YES", new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
downloadPDF downloadpdf = new downloadPDF(view,
position);
downloadpdf.execute(listItemURLs[position]);
}
});
da.setNegativeButton("No", new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
});
da.show();
}
});
}
public class downloadPDF extends AsyncTask<String, Integer, String> {
private View mView;
private int mPosition;
public downloadPDF(View view, int position) {
mView = view;
mPosition = position;
}
@Override
public void onPreExecute() {
super.onPreExecute();
mProgressDialog.show();
}
String fileName = listItem[mPosition];
String fileExtension=".pdf";
@Override
protected String doInBackground(String... sUrl) {
try {
URL url = new URL(sUrl[mPosition]);
HttpURLConnection connection =(HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
connection.setDoOutput(true);
connection.connect();
String PATH = Environment.getExternalStorageDirectory() + "/download/";
File file = new File(PATH);
file.mkdirs();
File outputFile = new File(file,fileName + fileExtension);
FileOutputStream fos = new FileOutputStream(outputFile);
InputStream is = connection.getInputStream();
// this will be useful so that you can show a typical 0-100%
// progress bar
int fileLength = connection.getContentLength();
// download the file
byte buffer[] = new byte[1024];
long total = 0;
int len1 = 0;
while ((len1 = is.read(buffer)) != -1) {
total += len1;
// publishing the progress....
publishProgress((int) (total * 100 / fileLength));
fos.write(buffer, 0, len1);
}
fos.flush();
fos.close();
is.close();
} catch (Exception e) {
}
return null;
}
public void onPostExecute(Integer... progress) {
super.onProgressUpdate(progress);
mProgressDialog.setProgress(progress[0]);
Toast.makeText(MainActivity.this, "Download Complete",
Toast.LENGTH_SHORT).show();
mProgressDialog.dismiss();
}
}
}
我的 diff_view1.xml 是这样的......
<?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"
android:weightSum="1" >
<ListView
android:id="@+id/listview1"
android:layout_width="fill_parent"
android:layout_height="400dp" >
</ListView>
<Button
android:id="@+id/btnDownload"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Download"
android:layout_marginTop="30dp"/>
</LinearLayout>
我还在我的清单中添加了互联网、sdcard 写入等权限。
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.testProject.imageCheck"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk android:minSdkVersion="8" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
<activity
android:name=".MainActivity"
android:label="Titles/Styled (via theme)"
android:theme="@style/StyledIndicators" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
我有一个列表视图,其中填充了一个数组适配器,其中包含“文件 1”、“文件 2”等元素。我正在以“URL”(存储在数组中的那些)作为参数来启动异步任务的对象,但是当我运行并单击任何列表视图项目时,进度条卡在 0% 处,然后什么也没有发生。谁能帮我?这样做了几个小时但没有成功:(
谢谢你。