我是Android開發的初學者,我正在開發一個項目,爲此我需要使用異步任務將PDF文件從URL下載到我的手機中,我還需要在文件下載時顯示進度對話框。試圖從我的應用程序下載PDF文件,但它不起作用
這裏是我的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>
我也曾在我的清單中添加權限因特網,SD卡寫入等。
<?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%,然後什麼也沒有發生。誰能幫我?已經爲這樣幾個小時,但沒有成功:(
謝謝。