2016-06-04 2 views
0

Я хочу создать папку при щелчке по макету фотографии. И при щелчке макета созданная новая папка должна открываться, если она пуста, она должна показывать тост или должна открываться с изображениями. Для этого я создал новый файл, и я делаю проверку файлов, он бросает исключение нулевого указателя для массива файлов.Как создать папку во внешнем хранилище и проверить разрешение?

String path = Environment.getExternalStorageDirectory().toString(); 
File dir = new File(path,"/MeaVita"); 



File file1 = new File(Environment.getExternalStorageDirectory().getPath() + "/MeaVita"); 

File[] listFile = file1.listFiles(); 



    photosLayout.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 


      checkFilePermissions(); 


       if (!dir.isDirectory()) { 
       dir.mkdirs(); 
       } 


      if (listFile.length == 0) { 
        Toast.makeText(MainActivity.this, "The folder is empty.", Toast.LENGTH_SHORT).show(); 
       } else { 

        new MainActivity.SingleMediaScanner(MainActivity.this, listFile[0]); 
       } 

     } 
    }); 

методы

public class SingleMediaScanner implements MediaScannerConnection.MediaScannerConnectionClient { 

    private MediaScannerConnection mMs; 
    private File mFile; 

    public SingleMediaScanner(Context context, File f) { 
     mFile = f; 
     mMs = new MediaScannerConnection(context, this); 
     mMs.connect(); 
    } 

    public void onMediaScannerConnected() { 
     mMs.scanFile(mFile.getAbsolutePath(), null); 
    } 

    public void onScanCompleted(String path, Uri uri) { 
     Intent intent = new Intent(Intent.ACTION_VIEW); 
     intent.setData(uri); 
     startActivity(intent); 
     mMs.disconnect(); 
    } 

} 

private void checkFilePermissions() { 
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { 
     int hasWriteExternalStoragePermission = checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE); 
     if (hasWriteExternalStoragePermission != PackageManager.PERMISSION_GRANTED) { 
      requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 
        REQUEST_CODE_ASK_PERMISSIONS); 
     } 
    } 
} 

Вход:

FATAL EXCEPTION: main 
                     Process: com.example.siddhi.meavita, PID: 15025 
                     java.lang.NullPointerException: Attempt to get length of null array 
                      at com.example.siddhi.meavita.Activities.MainActivity$2.onClick(MainActivity.java:119) 
                      at android.view.View.performClick(View.java:5201) 

EDIT:

photosLayout.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 


      String folder_main = "MeaVita"; 
      File dir = new File(Environment.getExternalStorageDirectory(),folder_main); 


      checkFilePermissions(); 

      if (!dir.exists()) { 
       dir.mkdirs(); 
      } 

      File[] listFile = dir.listFiles(); 

      if (listFile.length == 0) { 
       Toast.makeText(MainActivity.this, "The folder is empty.", Toast.LENGTH_SHORT).show(); 
      } else { 

       new MainActivity.SingleMediaScanner(MainActivity.this, listFile[0]); 
      } 

     } 
    }); 

Этот код работает сейчас, но доза не просить разрешения, то и это создает Папка. Как?

Не получить то, что происходит неправильно помощь, пожалуйста ..

+0

показать свой MainActivity.java onClick() код –

+0

, пожалуйста, проверьте отредактированный вопрос. @SathishKumarJ – Sid

ответ

0

Попробуйте это,

String path = Environment.getExternalStorageDirectory().toString(); 
File dir = new File(path,"/MeaVita"); 
if (!dir.isDirectory()) { 
      dir.mkdirs(); 
      } 

добавить следующую строку ваш manifest.xml

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 

это может, поможет вам.

EDIT 1:

Кажется, вы доступ к пустой/пустой файл []. Вы можете изменить структуру кода, как,

String path = Environment.getExternalStorageDirectory().toString(); 
File dir = new File(path,"/MeaVita"); 

photosLayout.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 

     checkFilePermissions(); 
      if (!dir.isDirectory()) { 
      dir.mkdirs(); 
      } 

     File file1 = new File(Environment.getExternalStorageDirectory().getPath() + "/MeaVita"); 
     File[] listFile = file1.listFiles(); 

      if (listFile.length == 0) { 
       Toast.makeText(MainActivity.this, "The folder is empty.", Toast.LENGTH_SHORT).show(); 
      } else { 

       new MainActivity.SingleMediaScanner(MainActivity.this, listFile[0]); 
      } 

    } 
}); 
+0

Я добавил эти разрешения в манифест. Но это не помогает маршмелло, кроме того, нужно проверять разрешения во время выполнения. @Sathish Kumar J – Sid

+0

см. Мой отредактированный ответ –

+0

попробовал это все еще бросает npe. @Sathish Kumar J – Sid

0
String path = Environment.getExternalStorageDirectory().toString(); 
File dir = new File(path,"/MeaVita"); 

photosLayout.setOnClickListener(new View.OnClickListener() { 

    @Override 
    public void onClick(View v) { 

if (checkSelfPermission(android.Manifest.permission.WRITE_EXTERNAL_STORAGE) 
      == PackageManager.PERMISSION_GRANTED) { 
    if (!dir.isDirectory()) { 
     dir.mkdirs(); 
    } 


    if (listFile.length == 0) { 
       Toast.makeText(MainActivity.this, "The folder is empty.",Toast.LENGTH_SHORT).show(); 
      } else { 
       new MainActivity.SingleMediaScanner(MainActivity.this, listFile[0]); 
      } 
    } 
    } else { 
     checkFilePermissions(); 

} });

+0

Я пробовал это все еще, он бросает npe. Я также пробовал Файл [] listFile = dir.listFiles(); после mkdirs(). @ Mây Và Bão – Sid

+0

Как насчет этого ??? String folder_main = "MeaVita"; Файл dir = new Файл (Environment.getExternalStorageDirectory(), folder_main); if (! F.exists()) { f.mkdirs(); } Файл [] listFile = file1.listFiles(); –

+0

какой файл1 в этом? @ Mây Và Bão – Sid

Смежные вопросы