Android 将ftp文件下载到sd卡,并在LCIK的列表视图中显示
我已经从ftp下载了文件并保存在sd卡中。因此,我想通过单击listview从sd卡获取文件来显示文件。但这对我不起作用 这是我的密码Android 将ftp文件下载到sd卡,并在LCIK的列表视图中显示,android,listview,onclick,Android,Listview,Onclick,我已经从ftp下载了文件并保存在sd卡中。因此,我想通过单击listview从sd卡获取文件来显示文件。但这对我不起作用 这是我的密码 public File f; public void onCreate(Bundle icicle) { super.onCreate(icicle); setContentView(R.layout.activity_main); lv = (ListView) findViewById(R.id.list);
public File f;
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.activity_main);
lv = (ListView) findViewById(R.id.list);
new Ftpclient().execute();
lv.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
String uri = f.toString(); // error here is null ponter exception
File file = new File(Environment.getExternalStorageDirectory()
.getAbsolutePath() + "/FtpFiles" + uri);
// if (uri.contains(".pdf")) {
Intent target = new Intent(Intent.ACTION_VIEW);
target.setDataAndType(Uri.fromFile(file), "application/pdf");
target.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
Intent intent = Intent.createChooser(target, "Open File");
try {
startActivity(intent);
} catch (Exception e) {
Toast.makeText(getApplicationContext(), "file not found",
500).show();
Log.e("error", "" + e);
}
// }
// }
}
class Ftpclient extends AsyncTask<String, Void, ArrayList<String>> {
ArrayList<String> temparrlist = new ArrayList<String>();
ProgressDialog dialog;
protected void onPreExecute() {
dialog = ProgressDialog.show(MainActivity.this, "Connecting",
"please wait");
}
protected ArrayList<String> doInBackground(String... connection) {
temparrlist = listftpitems();
return temparrlist;
}
protected void onPostExecute(ArrayList<String> result) {
ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(
MainActivity.this, android.R.layout.simple_list_item_1,
result);
lv.setAdapter(arrayAdapter);
dialog.dismiss();
}
}
感谢您的帮助,在onPostExecute中的lv.setAdapter(arrayAdapter)之后尝试使用lv.invalidate()成员
文件f
从未初始化,因此默认为null
。这就是执行以下操作时抛出NPE的原因:
String uri = f.toString();
您成功下载了文件?是的,我可以加载文件,所以您只想在listview中显示文件?是的,我想通过从名为ftpfiles的sd卡文件夹中提取文件来显示listview项目,这是什么类型的文件?也只有PDF或其他文件?为什么要使
f
non-null?如果我像这样更改此uri ArrayList temparrlist=new ArrayList();temparrlist=listftpitems();字符串uri=temparrlist.get(position.toString();我怎么能初始化呢?我不能这样告诉你,但你应该试一试。只有一件事:在上面的注释中,您正在创建一个新的temparrlist,然后再为其分配另一个值。
String uri = f.toString();