私はアンドロイド開発の初心者です。プロジェクトに取り組んでいます。そのためには、非同期タスクを使用して 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% で動かなくなり、何も起こりません。誰でも私を助けることができますか?何時間もこれを行ってきましたが、成功しませんでした:(
ありがとうございました。