通过getIntent()putExtra()

时间:2019-04-01 18:14:22

标签: java android sqlite

我是Android Studio的新手,并且堆栈溢出,所以我可能没有任何意义,但是我想将一些数据从一项活动传递到另一项活动。我已经通过意图上的putExtra()处理了想要传递给活动的所有文本。但是,我不知道如何在必须使用setImageResource()生成的图像上设置getIntent。

FavActivity

                        Cursor cursor = (Cursor) mylist.getItemAtPosition(position);
                        String listName = cursor.getString(1);
                        String displayName = db.getName(listName);

if (!displayName.isEmpty()) {
                            String isleName = db.getIsle(listName);
                            String rowName = db.getRow(listName);
                            String locationImage = db.getLocationImage(listName);
                            Intent myIntent = new Intent(view.getContext(),MainActivity.class);
                            myIntent.putExtra("name", displayName);
                            myIntent.putExtra("isle", "Isle: " + isleName);
                            myIntent.putExtra("row", "Row: " +rowName);
                            myIntent.putExtra("image", locationImage);
                            startActivity(myIntent);

MainActivity

        textView.setText(getIntent().getStringExtra("name"));
        textView3.setText(getIntent().getStringExtra("isle"));
        textView4.setText(getIntent().getStringExtra("row"));

图像位置必须设置为从数据库文本转换

locationView.setImageResource(getResources().getIdentifier(locationImage, "drawable", getPackageName()));

我该如何设定意图?

3 个答案:

答案 0 :(得分:1)

将图像存储在文件中,并将文件路径通过意图传递到另一个活动,您可以在另一个活动中从该文件路径访问图像

答案 1 :(得分:0)

Hiii, 您可以发送Base64格式的图像并将其在下一个活动中接收后转换为图像。

尽管请确保您可以使用50kb发送最多Intents数据。 否则,您的应用可能会在发送和接收数据时出现异常。

答案 2 :(得分:0)

您可以传递图像,但是我建议将图像存储在内部存储器中,然后使用Intent传递它们。

从API 24开始,有1 MB的限制,否则它将抛出TransactionTooLarge Exception并且可能会占用您过多的内存

将图像保存到内部存储器-

public String createImageFromBitmap(Bitmap bitmap) {
    String fileName = "myImage";//no .png or .jpg needed
    try {
        ByteArrayOutputStream bytes = new ByteArrayOutputStream();
        bitmap.compress(Bitmap.CompressFormat.JPEG, 100, bytes);
        FileOutputStream fo = openFileOutput(fileName, Context.MODE_PRIVATE);
        fo.write(bytes.toByteArray());
        // remember close file output
        fo.close();
    } catch (Exception e) {
        e.printStackTrace();
        fileName = null;
    }
    return fileName;
}

,然后在 Bundle

中传递该文件名
Bitmap bitmap = BitmapFactory.decodeStream(context
                    .openFileInput("myImage"));

要使用的另一个示例

protected void onCreate(Bundle savedInstanceState) {
    setContentView(R.layout.my_layout);
    Bitmap bitmap = getIntent().getParcelableExtra("image");
    ImageView imageView = (ImageView) findViewById(R.id.imageview);
    imageView.setImageBitmap(bitmap);
 }