2017-01-03 3 views
1

Я пишу приложение для Android, которое включает в себя выбор нескольких изображений и загрузку их на сервер синтаксического анализа. Я реализовал выбор нескольких изображений, используя Telegram Android Gallery picker. Моя проблема возникает, когда пришло время конвертировать изображения в растровые изображения и сохранять их в Parse. Я получаю следующее сообщение об ошибке:Загрузите несколько изображений на сервер Parse Android Java

java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=2, result=-1, data=Intent { (has extras) }} to activity {[package]/[package].MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'java.io.File com.parse.ParsePlugins.getParseDir()' on a null object reference

И

Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.io.File com.parse.ParsePlugins.getParseDir()' on a null object reference

Все входные приветствуется! Благодарю.

Вот мой код:

public class MainActivity extends AppCompatActivity { 
    private Bitmap bitmap; 

    @Override 
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { 
     super.onRequestPermissionsResult(requestCode, permissions, grantResults); 

     if (requestCode == 2) { 
      if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {} 
     } 
    } 

    public void pickImage(View view) { 
     GalleryConfig config = new GalleryConfig.Build() 
      .limitPickPhoto(8) 
      .singlePhoto(false) 
      .hintOfPick("this is pick hint") 
      .filterMimeTypes(new String[] { 
       "image/*" 
      }) 
      .build(); 
     GalleryActivity.openActivity(MainActivity.this, 2, config); 
    } 

    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 

     //list of photos of seleced 
     List <String> photos = (List <String>) data.getSerializableExtra(GalleryActivity.PHOTOS); 

     if (photos != null) { 
      for (String photo: photos) { 
       // BitmapFactory.Options options = new BitmapFactory.Options(); 
       // options.inPreferredConfig = Bitmap.Config.ARGB_8888; 

       bitmap = BitmapFactory.decodeFile(photo); 
       ByteArrayOutputStream stream = new ByteArrayOutputStream(); 
       bitmap.compress(Bitmap.CompressFormat.PNG, 100, stream); 
       byte[] image = stream.toByteArray(); 

       ParseFile file = new ParseFile("image.png", image); 
       file.saveInBackground(new SaveCallback() { 
        @Override 
        public void done(ParseException e) { 
         if (e == null) { 
          Log.i("did it fail?", "no"); 
         } else { 
          // Failed 
          Log.i("did it fail?", "yes"); 
         } 
        } 
       }); 

       ParseObject iupload = new ParseObject("ImageUpload"); 
       iupload.put("ImageName", "productImage"); 
       iupload.put("ImageFile", file); 
       iupload.saveInBackground(); 
      } 
      Log.i("Is it done?", "Yes"); 
     } else { 
      Log.i("Is it done?", "nope"); 
     } 

     //list of videos of seleced 
     // List<String> vides = (List<String>) data.getSerializableExtra(GalleryActivity.VIDEOS); 
    } 

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

     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { 
      if (checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { 
       requestPermissions(new String[] { 
        Manifest.permission.READ_EXTERNAL_STORAGE 
       }, 2); 
      } 
     } 

    } 
} 

Редактировать - Есть на самом деле две ошибки с той же ошибкой: - если изображение с телефона он попадает в линию Разбор и аварий приложений, - если изображение с карты SD сработает до этого. Тьфу

Edit 2 - Я исправил ошибки в Edit # 1, так что теперь это 100% что-то не работает с разбором!

ответ

0

Вы инициализировали Parse?

Parse.enableLocalDatastore(this); 
Parse.initialize() 
Parse.initialize(this, "APPLICATION_ID", "CLIENT_KEY"); 
+0

Да, в классе StarterApplication! – Ender

+0

Я заново создаю приложение, и, действительно, мне не хватало декларации Parse в манифесте android. Однако теперь я получаю следующую ошибку времени выполнения: java.lang.RuntimeException: Ошибка предоставления результата ResultInfo {who = null, request = 2, result = -1, data = Intent {(имеет дополнительные функции)}} для действия {com .example.igp/com.example.igp.MainActivity}: java.lang.IllegalArgumentException: значение может быть не равным нулю. – Ender

+0

Пожалуйста, создайте еще один вопрос для другой проблемы. Закройте это, указав правильный ответ. – Divers

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