2015-02-17 5 views
0

Я пытаюсь создать MP3-плеер, но у меня есть ошибки в моей студии Android. Я тестировал Sony Xperia T3. Пожалуйста, помогите! Я не знаю, где проблема .. Ошибка в функции FindSongs (для (SingleFile файла: файлы))Android FATAL EXCEPTION: main - Android Studio

821-821/dsada.dsada E/AndroidRuntime﹕ FATAL EXCEPTION: main 
    Process: dsada.dsada, PID: 821 
    java.lang.NullPointerException 
      at dsada.dsada.MainActivity.findSongs(MainActivity.java:63) 
      at dsada.dsada.MainActivity$1.onClick(MainActivity.java:39) 

Мой код:

import android.os.Bundle; 
import android.os.Environment; 
import android.support.v7.app.ActionBarActivity; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.View; 
import android.widget.ArrayAdapter; 
import android.widget.Button; 
import android.widget.ListAdapter; 
import android.widget.ListView; 
import android.widget.Toast; 

import java.io.File; 
import java.util.ArrayList; 


public class MainActivity extends ActionBarActivity { 

    String[] items; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     Button button = (Button)findViewById(R.id.button); 

     button.setOnClickListener(
       new Button.OnClickListener() { 
        public void onClick(View v) 
        { 
         /*String[] items = {"stachu"}; 
         ListAdapter laftyAdapter = new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_list_item_1, items); 
         ListView laftyView = (ListView) findViewById(R.id.listView); 
         laftyView.setAdapter(laftyAdapter);*/ 

         ArrayList<File> mySongs = findSongs(Environment.getExternalStorageDirectory()); 
         items = new String[mySongs.size()]; 

         for(int i = 0; i < mySongs.size(); i++) 
         { 
          toast(mySongs.get(i).getName().toString()); 
          items[i] = mySongs.get(i).getName().toString(); 
         } 

         ListAdapter laftyAdapter = new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_list_item_1, items); 
         ListView laftyView = (ListView) findViewById(R.id.listView); 
         laftyView.setAdapter(laftyAdapter); 
        } 
       } 
     ); 
    } 
    public void toast(String text) 
    { 
     Toast.makeText(getApplicationContext(), text, Toast.LENGTH_SHORT); 
    } 
    public ArrayList<File> findSongs(File root) { 
     ArrayList<File> al = new ArrayList<File>(); 
     File[] files = root.listFiles(); 

     for(File singleFile : files) 
     { 
      if(singleFile.isDirectory()) 
      { 
       al.addAll(findSongs(singleFile)); 
      } else { 
       if(singleFile.getName().endsWith(".mp3")) 
       { 

       } 
      } 
     } 
     return al; 
    } 
    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.menu_main, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // Handle action bar item clicks here. The action bar will 
     // automatically handle clicks on the Home/Up button, so long 
     // as you specify a parent activity in AndroidManifest.xml. 
     int id = item.getItemId(); 

     //noinspection SimplifiableIfStatement 
     if (id == R.id.action_settings) { 
      return true; 
     } 

     return super.onOptionsItemSelected(item); 
    } 
} 
+0

Какая линия эта неудача? – Codeman

+0

Возможный дубликат [Что такое исключение Null Pointer Exception и как его исправить?] (Http://stackoverflow.com/questions/218384/what-is-a-null-pointer-exception-and-how-do -i-fix-it) – Simon

+0

@Simon это не ошибка исключения с нулевым указателем, это проблема с разрешениями. – Codeman

ответ

3

Это очень вероятно, что вы не добавили READ_EXTERNAL_STORAGE разрешение вашего манифеста. Попробуйте добавить это, и ваши файлы должны появиться.

Если вы выяснили, что LOC терпит неудачу, я могу дать более конкретный ответ.

+0

Удивительный! Работа!! –

+0

@ KamilKowalczyk убедитесь, что вы повышаете и особенно отмечаете ответ как правильный, если он решил вашу проблему. – Codeman

0

Проблема в том, что root.listFiles() возвращает null. (Я подсчитал номера строк из записи в findSongs, о которой говорит трассировка стека, строка 39 делает линию 63 циклом for.) Как отмечал Pheonixblade9, это, скорее всего, проблема с разрешениями.

При этом вы должны добавить проверку, чтобы предотвратить возникновение этой ошибки. Я бы предложил добавить следующий код:

public ArrayList<File> findSongs(File root) { 
    ArrayList<File> al = new ArrayList<File>(); 
    File[] files = root.listFiles(); 

    if(files == null) return al; // No files available. 

    for(File singleFile : files) 
Смежные вопросы