【发布时间】:2019-05-02 18:58:34
【问题描述】:
我试图将一个字符串从一个活动传递到另一个活动,它返回 NULL,有问题的字符串具有我之前保存的图像的 uri。
在活动一中,我有一个函数可以保存图像并将字符串 URI 放入类的变量中。接下来我放代码。
活动一
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);
活动二
Intent intent = getIntent();
// return null
String image = intent.getStringExtra("image_path");
【问题讨论】:
-
尝试在 onScanCompleted 中运行
startActivity(intent);。在扫描完成之前切换活动。 -
你能展示你的完整代码吗?很难理解这里发生的事情。但看起来您立即在活动一的
onCreate()函数中启动活动二。但是,在调用 OnScanCompletedListener 之前不会设置image_path,这几乎总是在调用startActivity()之后发生。 -
这里添加活动一的代码
标签: java android android-intent