1

Android の File.exists 機能に奇妙な問題があります。以下は私のコードです

@Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
    {
        super.onCreateView(inflater, container, savedInstanceState);
        View view = inflater.inflate(R.layout.fragment_file_browser, container);

        DataBaseHelper tmpHelper = new DataBaseHelper(getActivity());
        ButtonInfoContainer infoContainer = tmpHelper.getVideoWithId(videoId);



        //Tmp way to use this. When UX is finished will create a better way.
        File f = new File(Environment.getExternalStorageDirectory() + "/aslkfj");
        Log.i(StaticValues.TAG, Environment.getExternalStorageDirectory() + "/aslkfj");

        LinearLayout tmpView2 = (LinearLayout) view.findViewById(R.id.custom_recordings);
        if(f.exists());
        {
            Log.i(StaticValues.TAG, "f exists");

            String[] tmp = f.list();
            View tmpView = null;

            if(tmp != null)
            {
                for(int i = 0; i < tmp.length; i ++)
                {   
                    tmpView = inflater.inflate(R.layout.list_item, null);
                    TextView tmpText = (TextView) tmpView.findViewById(R.id.product_name);
                    tmpText.setText(tmp[i]);
                    tmpView2.addView(tmpView);
                }
            }
        }
        return view;
    }

すべてがクールですが、奇妙な部分は、 File.exists が誤検知を返すことです。ファイルが存在すると常に表示されます(このアプリだけですが)。上記のパス /aslkfj は存在しませんが、このコードを実行すると、logcat が f を出力します。なぜそのようなことが起こるのでしょうか。

4

2 に答える 2

10

semi-colon条件の最後にa がありますif: -

if(f.exists());  <-- Semi-colon here is causing problem

このため、次のブロックは単なるローカル ブロックであり、if 条件の評価に関係なく実行されます。

于 2013-01-04T19:34:31.563 に答える
6

重大なタイプミスがあります:

if(f.exists());

は基本的にステートメントを;無視します。if

これは、次のような迅速な条件分岐に非常に便利です。

if(f.exists())
    Log.i(StaticValues.TAG, "f exists");

しかし、ここでおっと。

于 2013-01-04T19:34:34.403 に答える