Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/180.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 将ftp文件下载到sd卡,并在LCIK的列表视图中显示_Android_Listview_Onclick - Fatal编程技术网

Android 将ftp文件下载到sd卡,并在LCIK的列表视图中显示

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);

我已经从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();
    }
}

感谢您的帮助,在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();