onActivityResult не вызывается после открытия камеры

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

Основная деятельность

 public class MainActivity extends AppCompatActivity {
 ImageView imageView;
 Socket clientSocket = null;
 byte[] byteFromImage;
 Bitmap bitmap;

 protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    new Thread(new Runnable() {
        @Override
        public void run() {
            try {
                clientSocket = new Socket("192.168.178.41", 6066);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }).start();

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

    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            dispatchTakePictureIntent();
            new Thread(new Runnable() {
                @Override
                public void run() {
                    try {

                        //mb outputstream
           OutputStream output = clientSocket.getOutputStream();
                        output.write(byteFromImage);
                        output.flush();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }).start();
        } }); }


   public void dispatchTakePictureIntent() {
 Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    startActivityForResult(takePictureIntent, 1);
 }
  @Override
   protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == 1 && resultCode == RESULT_OK) {
        Bitmap imageBitmap = (Bitmap) data.getExtras().get("data");
        bitmap = imageBitmap;
        ByteArrayOutputStream stream = new ByteArrayOutputStream();

        Bitmap copy = bitmap;
        //maybe jpg
        copy.compress(Bitmap.CompressFormat.PNG, 100, stream);

        byteFromImage = stream.toByteArray();
        imageView.setImageBitmap(imageBitmap);
    }
 }
 public void print(String message) {
     Log.e("My output: ",message);
 }

}

Манифест

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.education.client">
<uses-permission android:name="android.permission.INTERNET"/>
<uses-feature android:name="android.hardware.camera"
    android:required="true" />


<application
    android:noHistory="true"
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    <activity android:name=".MainActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>

    </activity>
</application>

I appreciate any help!!


person Community    schedule 02.05.2017    source источник
comment
надеюсь, что это поможет вам stackoverflow.com/questions/13304385/   -  person Sandeep dhiman    schedule 02.05.2017
comment
я вызвал setResult, и теперь он вызывает метод после фотографирования. но после открытия камеры происходит сбой основного действия, потому что я получаю нулевой указатель от byteFromImage в output.write(byteFromImage);. для меня это не имеет смысла, потому что этот метод вызывается после метода onActivityResult()   -  person    schedule 02.05.2017
comment
Это потому, что ваше растровое изображение не полностью преобразовано в массив байтов.   -  person Sandeep dhiman    schedule 02.05.2017
comment
да, кажется, что растровое изображение равно нулю, потому что setImageBitmap дает мне нулевой указатель, что не так с его получением таким образом?   -  person    schedule 02.05.2017


Ответы (2)


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

  if(data.getData()==null){
    bitmap = (Bitmap)data.getExtras().get("data");
}else{
    bitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), data.getData());
}

а затем преобразовать это растровое изображение в массив байтов

person Sandeep dhiman    schedule 02.05.2017

Я нашел свой ответ! Мне пришлось повторно инициализировать ImageView в onActivityResult() :) Спасибо @Sandeep dhiman!!

person Community    schedule 02.05.2017