2014-11-15 1 views
0

При загрузке всех файлов, содержащих изображения и видео с SD-карты, и показано в gridview, это то, что мой сценарий, поэтому при работе с файлами я получаю runtimeexception.java.lang.Runtime Exception?

Это мой код

MainActivity класс

AsyncTaskLoadFiles myAsyncTaskLoadFiles; 
    ImageAdapter myImageAdapter; 

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

     final GridView gridview = (GridView) findViewById(R.id.gridView1); 
     myImageAdapter = new ImageAdapter(this); 
     gridview.setAdapter(myImageAdapter); 

     myAsyncTaskLoadFiles = new AsyncTaskLoadFiles(myImageAdapter); 
     myAsyncTaskLoadFiles.execute(); 

Asyncloadfiles:

 File targetDirector; 
     ImageAdapter myTaskAdapter; 

     public AsyncTaskLoadFiles(ImageAdapter adapter) { 
      myTaskAdapter = adapter; 
     } 

     @Override 
     protected void onPreExecute() { 
      String ExternalStorageDirectoryPath = Environment 
        .getExternalStorageDirectory().getAbsolutePath(); 

      String targetPath = ExternalStorageDirectoryPath + "/test/"; 
      targetDirector = new File(targetPath); 
      myTaskAdapter.clear(); 

      super.onPreExecute(); 
     } 

     @Override 
     protected Void doInBackground(Void... params) { 

      File[] files = targetDirector.listFiles(); 
      for (File file : files) { 
       publishProgress(file.getAbsolutePath()); 
       if (isCancelled()) 
        break; 
      } 
      return null; 
     } 

     @Override 
     protected void onProgressUpdate(String... values) { 
      myTaskAdapter.add(values[0]); 
      super.onProgressUpdate(values); 
     } 

     @Override 
     protected void onPostExecute(Void result) { 
      myTaskAdapter.notifyDataSetChanged(); 
      super.onPostExecute(result); 
     } 

    } 

ImageAdapter:

private Context mContext; 
    ArrayList<String> itemList = new ArrayList<String>(); 

    public ImageAdapter(Context c) { 
     mContext = c; 
    } 

    void add(String path) { 
     itemList.add(path); 
    } 

    void clear() { 
     itemList.clear(); 
    } 

    void remove(int index) { 
     itemList.remove(index); 
    } 

    @Override 
    public int getCount() { 
     return itemList.size(); 
    } 

    @Override 
    public Object getItem(int position) { 
     // TODO Auto-generated method stub 
     return itemList.get(position); 
    } 

    @Override 
    public long getItemId(int position) { 
     // TODO Auto-generated method stub 
     return 0; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     ImageView imageView; 
     if (convertView == null) 
     { // if it's not recycled, initialize some 
      // attributes 
      imageView = new ImageView(mContext); 

     } else { 
      imageView = (ImageView) convertView; 
     } 

     Picasso.with(mContext).load(itemList.get(position)).into(imageView); 


     return imageView; 
    } 

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

Это ошибка logcat.

11-15 11:07:38.760: E/AndroidRuntime(779): FATAL EXCEPTION: AsyncTask #1 
11-15 11:07:38.760: E/AndroidRuntime(779): java.lang.RuntimeException: An error occured while executing doInBackground() 
11-15 11:07:38.760: E/AndroidRuntime(779): at android.os.AsyncTask$3.done(AsyncTask.java:278) 
11-15 11:07:38.760: E/AndroidRuntime(779): at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273) 
11-15 11:07:38.760: E/AndroidRuntime(779): at java.util.concurrent.FutureTask.setException(FutureTask.java:124) 
11-15 11:07:38.760: E/AndroidRuntime(779): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307) 
11-15 11:07:38.760: E/AndroidRuntime(779): at java.util.concurrent.FutureTask.run(FutureTask.java:137) 
11-15 11:07:38.760: E/AndroidRuntime(779): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:208) 
11-15 11:07:38.760: E/AndroidRuntime(779): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076) 
11-15 11:07:38.760: E/AndroidRuntime(779): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569) 
11-15 11:07:38.760: E/AndroidRuntime(779): at java.lang.Thread.run(Thread.java:856) 
11-15 11:07:38.760: E/AndroidRuntime(779): Caused by: java.lang.NullPointerException 
11-15 11:07:38.760: E/AndroidRuntime(779): at com.example.picasagrid.MainActivity$AsyncTaskLoadFiles.doInBackground(MainActivity.java:54) 
11-15 11:07:38.760: E/AndroidRuntime(779): at com.example.picasagrid.MainActivity$AsyncTaskLoadFiles.doInBackground(MainActivity.java:1) 
11-15 11:07:38.760: E/AndroidRuntime(779): at android.os.AsyncTask$2.call(AsyncTask.java:264) 
11-15 11:07:38.760: E/AndroidRuntime(779): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305) 
11-15 11:07:38.760: E/AndroidRuntime(779): ... 5 more 
+0

Можете ли вы добавить точное сообщение об ошибке и stacktrace к своему вопросу? – sherb

+0

отправил мою ошибку тоже .. – Hari

+0

@ Haritha_90 вы видите, что 'Caused by ...' в трассировке стека? Это поможет вам найти проблему? – sherb

ответ

0

для операций ввода-вывода всегда использовать попробовать поймать, потому что ваш адрес к файлу может быть неправильно или каталог не может существовать и тому подобное и здесь это потому, что файл не существует, или Неверный адрес

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