Android ListView:在基本适配器中使用异步类
我有一个类Download_格式,它是一个列出pdf文件的列表视图活动,我正在使用异步任务填充列表 下载\u格式Android ListView:在基本适配器中使用异步类,android,listview,pdf,android-listview,Android,Listview,Pdf,Android Listview,我有一个类Download_格式,它是一个列出pdf文件的列表视图活动,我正在使用异步任务填充列表 下载\u格式 public class Download_format extends Activity { JSONObject jsonobject; JSONArray jsonarray; ArrayList<HashMap<String, String>> arraylist; static String url = "http:
public class Download_format extends Activity {
JSONObject jsonobject;
JSONArray jsonarray;
ArrayList<HashMap<String, String>> arraylist;
static String url = "http://192.168.170.89/bbau_download.php";
static String down_desc = "down_desc";
static String down_url = "down_url";
ListView listview;
DownloadListViewAdapter adapter;
@Override
public void onCreate(Bundle savedInstantState) {
super.onCreate(savedInstantState);
// Get the view from listview_main.xml
setContentView(R.layout.down_layout);
if (url != null && url.trim().length() > 0) {
//System.out.println("Before exec: "+url);
new DownloadJSON().execute(url);
}
}
private class DownloadJSON extends AsyncTask<String, Void, Void> {
@Override
protected Void doInBackground(String... params) {
// Create an array
arraylist = new ArrayList<HashMap<String, String>>();
String url1 = params[0];
// Retrieve JSON Objects from the given URL address
jsonobject = JSONfunctions.getJSONfromURL(url1);
try {
// Locate the array name in JSON
jsonarray = jsonobject.getJSONArray("Download");
for (int i = 0; i < jsonarray.length(); i++) {
HashMap<String, String> map = new HashMap<String, String>();
jsonobject = jsonarray.getJSONObject(i);
// Retrive JSON Objects
System.out.println(jsonobject.getString("Down_desc"));
System.out.println(jsonobject.getString("Down_link"));
map.put("down_desc", jsonobject.getString("Down_desc"));
map.put("down_url", jsonobject.getString("Down_link"));
// Set the JSON Objects into the array
arraylist.add(map);
}
} catch (JSONException e) {
Log.e("Error", e.getMessage());
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(Void args) {
// Locate the listview in listview_main.xml
listview = (ListView) findViewById(R.id.down_list);
//listview.addItemDecoration(new HorizontalDividerItemDecoration.Builder(this).color(Color.BLACK).build());
// Pass the results into ListViewAdapter.java
adapter = new DownloadListViewAdapter(Download_format.this, arraylist);
// Set the adapter to the ListView
listview.setAdapter(adapter);
}
}
}
或者,如果有其他方法可以在单击列表视图项时下载pdf文件…请提供帮助。您需要传入对
上下文的引用,因为startActivity()
是在上下文中定义的。例如,活动
是一个上下文
。将上下文传递给构造函数中的DownloadFile,然后调用Context.startActivity(pdfIntent);
public class DownloadListViewAdapter extends BaseAdapter {
public static final int progress_bar_type = 0;
Context context;
LayoutInflater inflater;
ArrayList<HashMap<String, String>> data;
HashMap<String, String> resultp = new HashMap<String, String>();
static int Down=0;
private ProgressDialog pDialog = null;
private static final int MEGABYTE = 1024 * 1024;
public DownloadListViewAdapter(Context context,
ArrayList<HashMap<String, String>> arraylist) {
this.context = context;
data = arraylist;
}
@Override
public int getCount() {
return data.size();
}
@Override
public Object getItem(int position) {
return position;
}
@Override
public long getItemId(int position) {
return position;
}
public View getView(final int position, View convertView, ViewGroup parent) {
// Declare Variables
TextView down_desc;
TextView down_url;
inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View itemView = inflater.inflate(R.layout.down_format_item, parent, false);
// Get the position
resultp = data.get(position);
// Locate the TextViews in listview_item.xml
down_desc = (TextView) itemView.findViewById(R.id.down_text);
down_url = (TextView) itemView.findViewById(R.id.down_url);
// Capture position and set results to the TextViews
down_desc.setText(resultp.get(Download_format.down_desc));
down_url.setText(resultp.get(Download_format.down_url));
// Capture ListView item click
itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
// Get the position
resultp = data.get(position);
new DownloadFile().execute(resultp.get(Download_format.down_url), resultp.get(Download_format.down_desc+".pdf"));
}
});
return itemView;
}
private class DownloadFile extends AsyncTask<String, String, String> {
@Override
protected void onPreExecute() {
super.onPreExecute();
showDialog(progress_bar_type);
}
@Override
protected String doInBackground(String... strings) {
String fileUrl = strings[0]; // -> http://maven.apache.org/maven-1.x/maven.pdf
String fileName = strings[1]; // -> maven.pdf
File pdfFile = null;
//if there is no SD card, create new directory objects to make directory on device
if (Environment.getExternalStorageState() == null) {
System.out.println("SD card not installed");
//create new file directory object
String extStorageDirectory = Environment.getDataDirectory().toString();
File folder = new File(extStorageDirectory, "BBAU_Downloads");
System.out.println(extStorageDirectory);
if (folder.exists()) {
File[] dirFiles = folder.listFiles();
if (dirFiles.length != 0) {
for (int ii = 0; ii < dirFiles.length; ii++) {
if(dirFiles[ii].getName().equals(fileName)){
System.out.println("File is present");
pDialog.dismiss();
Down=1;}
}
}
}
if (!folder.exists()) {
folder.mkdir();
}
pdfFile = new File(folder, fileName);
try {
pdfFile.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
}else if(Environment.getExternalStorageState() != null){
System.out.println("SD card installed");
String extStorageDirectory = Environment.getExternalStorageDirectory().toString();
File folder = new File(extStorageDirectory, "MCAcourse");
System.out.println(extStorageDirectory);
if (folder.exists()) {
File[] dirFiles = folder.listFiles();
System.out.println(dirFiles.length);
if (dirFiles.length != 0) {
for (int ii = 0; ii < dirFiles.length; ii++) {
Log.d("PDF name:", dirFiles[ii].getName());
if(dirFiles[ii].getName().equals(fileName)){
System.out.println("File is present");
pDialog.dismiss();
Down=1;
}
}
}
}
if (!folder.exists()) {
folder.mkdir();
}
pdfFile = new File(folder, fileName);
try {
pdfFile.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
}
if(Down==0) {
try {
System.out.println(Down);
System.out.println("In Download file");
URL url = new URL(fileUrl);
URLConnection urlConnection = url.openConnection();
urlConnection.connect();
InputStream inputStream = urlConnection.getInputStream();
FileOutputStream fileOutputStream = new FileOutputStream(pdfFile);
int totalSize = urlConnection.getContentLength();
System.out.println(totalSize);
byte[] buffer = new byte[MEGABYTE];
long total = 0;
int bufferLength = 0;
while ((bufferLength = inputStream.read(buffer)) > 0) {
if (isCancelled()) {
inputStream.close();
return null;
}
total += bufferLength;
// publishing the progress....
if (totalSize > 0) // only if total length is known
publishProgress("" + (int) ((total * 100) / totalSize));
fileOutputStream.write(buffer, 0, bufferLength);
}
fileOutputStream.close();
} catch (FileNotFoundException e) {
System.out.println("Some error");
e.printStackTrace();
} catch (MalformedURLException e) {
System.out.println("Some error occured");
e.printStackTrace();
} catch (IOException e) {
System.out.println("Some error occured again");
e.printStackTrace();
}
}
return null;
}
@Override
protected void onPostExecute(String s){
File pdfFile = null;
if(Environment.getExternalStorageDirectory()!=null) {
pdfFile = new File(Environment.getExternalStorageDirectory() + "/MCAcourse/" + "syllabus.pdf"); // -> filename = maven.pdf
}else if(Environment.getExternalStorageDirectory()==null){
pdfFile = new File(Environment.getDataDirectory() + "/MCAcourse/" + "syllabus.pdf");
}
Uri path = Uri.fromFile(pdfFile);
Intent pdfIntent = new Intent(Intent.ACTION_VIEW);
pdfIntent.setDataAndType(path, "application/pdf");
pdfIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
try {
startActivity(pdfIntent);
} catch (ActivityNotFoundException e) {
Toast.makeText(DownloadListViewAdapter.this, "No Application available to view PDF", Toast.LENGTH_SHORT).show();
}
}
protected void onProgressUpdate(String... progress) {
// setting progress percentage
pDialog.setProgress(Integer.parseInt(progress[0]));
if (Integer.parseInt(progress[0]) >= 100) {
// close the progress bar dialog
pDialog.dismiss();
}
}
}
@Override
protected Dialog onCreateDialog(int id) {
switch (id) {
case progress_bar_type:
pDialog = new ProgressDialog(this);
pDialog.setMessage("Downloading file..");
pDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
pDialog.setCancelable(false);
pDialog.show();
return pDialog;
default:
return null;
}
}
try {
startActivity(pdfIntent);
} catch (ActivityNotFoundException e) {
Toast.makeText(DownloadListViewAdapter.this, "No Application available to view PDF", Toast.LENGTH_SHORT).show();