我已经从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);
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();
}
}
显示此行的NPE
String uri = f.toString();
总是感谢帮助,谢谢
答案 0 :(得分:0)
在onPostExecute中的lv.setAdapter(arrayAdapter)之后尝试使用lv.invalidate()
答案 1 :(得分:0)
成员File f
永远不会被初始化,因此默认为null
。这就是为什么在执行时抛出NPE的原因:
String uri = f.toString();