Я получаю NULL, когда я хочу получить строку в деятельности - PullRequest
0 голосов
/ 30 ноября 2018

Я пытаюсь передать строку из одного действия в другое, и она возвращает NULL, у рассматриваемой строки есть URI изображения, которое я сохранил ранее.

в действии, у меня есть функция, котораясохраняет изображение и помещает строковый URI в переменную класса.Затем я добавляю код.

Activity One

public class PaintActivity extends AppCompatActivity implements PaintView {

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

    tabLayout.setupWithViewPager(viewPager);

    intent = new Intent(this, ResultsActivity.class);

    readyButton.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {

            try {
                paintImage.buildDrawingCache();
                Bitmap bitmap = paintImage.getDrawingCache();

                saveImage(bitmap);

                presenter.getColorList();
                startActivity(intent);
            } catch(Exception e) {
                e.getMessage();
            }
        }
    });

}

private void saveImage(Bitmap finalBitmap) {

    String root = Environment.getExternalStoragePublicDirectory(
            Environment.DIRECTORY_PICTURES).toString();
    File myDir = new File(root + "/Tersuave");
    myDir.mkdirs();
    Random generator = new Random();

    int n = 10000;
    n = generator.nextInt(n);
    String fname = "Image-"+ n +".jpg";
    File file = new File (myDir, fname);
    if (file.exists ()) file.delete ();
    try {
        FileOutputStream out = new FileOutputStream(file);
        finalBitmap.compress(Bitmap.CompressFormat.JPEG, 90, out);
        // sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED,
        //     Uri.parse("file://"+ Environment.getExternalStorageDirectory())));
        out.flush();
        out.close();

    } catch (Exception e) {
        e.printStackTrace();
    }
    // Tell the media scanner about the new file so that it is
    // immediately available to the user.
    MediaScannerConnection.scanFile(this, new String[]{file.toString()}, null,
            new MediaScannerConnection.OnScanCompletedListener() {
                public void onScanCompleted(String path, Uri uri) {
                    Log.i("ExternalStorage", "Scanned " + path + ":");
                    Log.i("ExternalStorage", "-> uri=" + uri);
                    image_path = uri.toString();
                    intent.putExtra("image_path", image_path);
                }
            });

}

}

Затем в методе onCreate

paintImage.buildDrawingCache();
Bitmap bitmap = paintImage.getDrawingCache();

// this method is the one above 
saveImage(bitmap);
presenter.getColorList();
startActivity(intent);

Activity Two

Intent intent = getIntent();

// return null
String image = intent.getStringExtra("image_path");

Ответы [ 3 ]

0 голосов
/ 30 ноября 2018

Заглядывая в вашу реализацию, вы запускаете действие ResultsActivity до и добавляете значение image_path в extra для обратного вызова, который задерживается.

MediaScannerConnection.scanFile(this, new String[]{file.toString()}, null,
        new MediaScannerConnection.OnScanCompletedListener() {
            public void onScanCompleted(String path, Uri uri) {
                Log.i("ExternalStorage", "Scanned " + path + ":");
                Log.i("ExternalStorage", "-> uri=" + uri);
                image_path = uri.toString();
                intent.putExtra("image_path", image_path); // this will be called after some time

            }
        });


presenter.getColorList();
startActivity(intent);

Добавьте две выше строки после intent.putExtra внутри OnScanCompletedListener иудалить его из формы на ClickListener

0 голосов
/ 30 ноября 2018

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

     MediaScannerConnection.scanFile(this, new String[]{file.toString()}, null,
        new MediaScannerConnection.OnScanCompletedListener() {
            public void onScanCompleted(String path, Uri uri) {
                Log.i("ExternalStorage", "Scanned " + path + ":");
                Log.i("ExternalStorage", "-> uri=" + uri);
                image_path = uri.toString();

               Intent intent = new Intent(context,Activity2.class);
               intent.putExtra("image_path", image_path);
               startActivity(intent);
            }
        });

А внутри Activity2 вы можете сделать что-то вроде этого.

    String imageFilePath = getIntent().getStringExtra("image_path");
0 голосов
/ 30 ноября 2018

В своей основной деятельности вы должны сделать это, если хотите передать строку в намерении

FirstActivity

 Intent intent = new Intent(FirstActivity.this,SecondActivity.class);
 intent.putExtra("Keyname", image_path);
 startActivity(intent);

SecondActivity

onCreate ....

if(savedInstanceState == null)
            {
                Bundle extras = getIntent().getExtras();
                if (extras == null)
                {
                    //Extra bundle is null
                }else{
                    String image = extras.getString("Keyname");
                }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...