2015-06-03 5 views
3

У меня есть путь к файлу, который я хочу загрузить на Parse.com.Как загрузить аудиофайл в Parse.com - Android

Например, один из файлов трактов: «/storage/emulated/0/app100/2015-06-04_00:45:16_RecordSound.3gp»

Теперь я хочу, чтобы загрузить его на Разбираем .com. Любое решение, как это сделать?

Я попытался написать метод для этого, но это не работает:

private ParseObject uploadAudioToParse(File audioFile, ParseObject po, String columnName){ 

    if(audioFile != null){ 
     Log.d("EB", "audioFile is not NULL: " + audioFile.toString()); 
     ByteArrayOutputStream out = new ByteArrayOutputStream(); 
     BufferedInputStream in = null; 
     try { 
      in = new BufferedInputStream(new FileInputStream(audioFile)); 
     } catch (FileNotFoundException e) { 
      e.printStackTrace(); 
     } 
     int read; 
     byte[] buff = new byte[1024]; 
     try { 
      while ((read = in.read(buff)) > 0) 
      { 
       out.write(buff, 0, read); 
      } 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     try { 
      out.flush(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     byte[] audioBytes = out.toByteArray(); 
     // Create the ParseFile 
     ParseFile file = new ParseFile(audioFile.getName() , audioBytes); 
     // Upload the file into Parse Cloud 
     file.saveInBackground(); 
     po.put(columnName, file); 
    } 
    return po; 
} 

Спасибо!

+0

есть ли какой-либо вывод из logcat или он просто не загружается в Parse –

+0

Он просто не загружается в Parse. –

+0

Ответил ниже, это должно быть решение! –

ответ

6

Попробуйте следующее:

private ParseObject uploadAudioToParse(File audioFile, ParseObject po, String columnName){ 

if(audioFile != null){ 
    Log.d("EB", "audioFile is not NULL: " + audioFile.toString()); 
    ByteArrayOutputStream out = new ByteArrayOutputStream(); 
    BufferedInputStream in = null; 
    try { 
     in = new BufferedInputStream(new FileInputStream(audioFile)); 
    } catch (FileNotFoundException e) { 
     e.printStackTrace(); 
    } 
    int read; 
    byte[] buff = new byte[1024]; 
    try { 
     while ((read = in.read(buff)) > 0) 
     { 
      out.write(buff, 0, read); 
     } 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    try { 
     out.flush(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    byte[] audioBytes = out.toByteArray(); 

    // Create the ParseFile 
    ParseFile file = new ParseFile(audioFile.getName() , audioBytes); 
    po.put(columnName, file); 

    // Upload the file into Parse Cloud 
    file.saveInBackground(); 
    po.saveInBackground(); 
} 
return po; 

}

Поместите объект в ParseObject, а затем сохраните файл. Кроме того, я добавил сохранение ParseObject (po.saveInBackground()). Поскольку вы изменили po, вам также нужно сохранить его. Возможно, вы сделали это вне метода, но ваш код, который вы связали, не показал этого.

Кроме того, попробуйте сделать это в AsyncTask и вызовите save() вместо этого, чтобы убедиться, что каждый шаг работает (если сохранить или что-то пойдет не так, отмените задачу) или используйте SaveCallback k, как указано ниже : ParseObject.saveInBackground (обратный вызов SaveCallback); и в выполненном методе вызовите сохранение в PO-объект после успешного сохранения ParseFile.

Примечание: существует ограничение на размер ParseFile 10 МБ, поэтому, если аудиофайл больше этого, будет проблема.

+0

Спасибо, человек! Теперь он работает! –

+0

Нет проблем, мой друг, отметьте его как принятый ответ, чтобы другие могли видеть решение вашего вопроса, если у них такая же проблема :) –

+0

Я получаю сообщение об ошибке: 'java.lang.NullPointerException: попытка вызвать виртуальный метод 'int java .io.BufferedInputStream.read (byte []) 'в ссылке нулевого объекта' – grant

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