将ftp文件下载到SD卡并在列表视图中显示onclick

时间:2014-07-25 10:52:04

标签: 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);
    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();

总是感谢帮助,谢谢

2 个答案:

答案 0 :(得分:0)

在onPostExecute中的lv.setAdapter(arrayAdapter)之后尝试使用lv.invalidate()

答案 1 :(得分:0)

成员File f永远不会被初始化,因此默认为null。这就是为什么在执行时抛出NPE的原因:

String uri = f.toString();