当前位置: 首页 > 知识库问答 >
问题:

如何使用putExtra()在第二个活动中发送和显示图像?

濮阳钟展
2023-03-14

我对Android Studio完全陌生,希望得到一些帮助。我正在尝试将一个图像ID从我的第一个活动类传递到我的第二个活动类。该程序应该显示水平滑动的一行按钮,其中包含艺术品的文本描述(这部分工作)。当单击按钮时,图像活动应该被启动以显示相应的艺术品(应用程序停止在模拟器中运行)。

有什么想法吗?非常感谢。再说一次,我对这一点完全陌生,所以任何见解,即使真的很明显,都会很有帮助。

以下是主要活动:

    private LinearLayout mLinearList;
    private String id;
    private Painting painting;

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

        //REFERENCE THE SCROLLABLE LAYOUT STRUCTURE IN MAIN_SCREEN.XML
        mLinearList = (LinearLayout) findViewById(R.id.linearList);

        //FILL THE SCROLLABLE LAYOUT STRUCTURE WITH PAINTINGS
        fillTextCarousel();

    }

    private void fillTextCarousel() {

        // POPULATE THE LINEAR LIST CAROUSEL WITH PAINTINGS AND DESCRIPTIONS
        Button buttonItem;

        for (int i = 0; i < RenaissanceDatabase.description.length; i++) {
            //STORE THE INDIVIDUAL PAINTINGS AS BUTTONS
            buttonItem = new Button(this);


            painting = new Painting(RenaissanceDatabase.description[i], RenaissanceDatabase.id[i]);

            //USE THE CONTENT DESCRIPTION PROPERTY TO STORE
            //PAINTING DATA

            buttonItem.setContentDescription(painting.getDescription());
            buttonItem.setText(painting.getDescription());

            //SET AN ONCLICK LISTENER FOR THE TEXT BUTTON
            buttonItem.setOnClickListener(displayPainting);

            //ADD THE IMAGE BUTTON TO THE SCROLLABLE LINEAR LIST
            mLinearList.addView(buttonItem);
        }
    }

    private View.OnClickListener displayPainting = new View.OnClickListener() {
         public void onClick(View btn) {
         // COLLECT THE IMAGE STORED FOR THE PAINTING
             Intent imgIntent = new Intent(getApplicationContext(), ImageActivity.class);
             imgIntent.setAction(imgIntent.ACTION_SEND);
             imgIntent.putExtra("image_id:",painting.getId());
             startActivity(imgIntent);

         }
    };

以下是到目前为止我对ImageActivity的了解:

private Button imgButton;

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

    painting = new Painting(RenaissanceDatabase.description[index], RenaissanceDatabase.id[index]);

    Intent objIntent=this.getIntent();
    ImageView art = (ImageView) findViewById(R.id.imageView2);
    art.setImageResource(Integer.parseInt(getExtra()));;
}

private String getExtra(){
    String image_id = getIntent().getStringExtra("image_id");
    return image_id;
}

这是绘画数据库的样子:

    public static String description[] = {
            "Venus of Urbino\nTitan, 1538",
            "St. John the Baptist\nLeonardo da Vinci, 1516",
            "Protrait of Baldassare Castiglione\nRaphael, 1515",
            "The Entombent of Christ\nCaravaggio, 1603",
            "Coronation of the Virgin\nFra Angelico, 1435",
            "Mars and Venus\n Sandro Bottcelli, 1483"};

    public static int id[] = {
            R.drawable.painting1, // VENUS OF URBINO
            R.drawable.painting2, // ST.JOHN BAPTIST
            R.drawable.painting3, // BALDASSARE
            R.drawable.painting4, // ENTOMBENT OF CHRIST
            R.drawable.painting5, // CORONOATION
            R.drawable.painting6  // MARS AND VENUS
    };

以下是崩溃时的堆栈跟踪:

03-21 15:41:01.283 14004-14004/edu。奥古斯塔纳。csc490。Renaissance/AndroidRuntime:致命异常:主java。lang.RuntimeException:无法启动活动组件信息{edu.augustana.csc490.renaissancepaints/edu.augustana.csc490.renaissancepaints.ImageActivity}:java。lang.NumberFormatException:无效int:在android上为空。应用程序。活动线程。在android上执行LaunchActivity(ActivityThread.java:2059)。应用程序。活动线程。android上的handleLaunchActivity(ActivityThread.java:2084)。应用程序。活动线程。在Android上获得600美元(ActivityThread.java:130)。应用程序。android上的ActivityThread$H.handleMessage(ActivityThread.java:1195)。操作系统。汉德勒。android上的dispatchMessage(Handler.java:99)。操作系统。活套。android上的loop(Looper.java:137)。应用程序。活动线程。java上的main(ActivityThread.java:4745)。朗,反思一下。方法java上的Invokenhtml" target="_blank">active(本机方法)。朗,反思一下。方法在com上调用(Method.java:511)。Android内部的操作系统。ZygoteInit$MethodandArgscaler。在com上运行(ZygoteInit.java:786)。Android内部的操作系统。合子体。dalvik的main(ZygoteInit.java:553)。系统原生艺术。main(本机方法)由以下原因引起:java。lang.NumberFormatException:无效int:在java中为“null”。整型。java上的invalidit(Integer.java:138)。整型。java上的parseInt(Integer.java:355)。整型。edu的parseInt(Integer.java:332)。奥古斯塔纳。csc490。蕾娜莎的画。影像活动。android上的onCreate(ImageActivity.java:40)。应用程序。活动android上的performCreate(Activity.java:5008)。应用程序。仪器仪表。android上的callActivityOnCreate(Instrumentation.java:1079)。应用程序。活动线程。android上的performLaunchActivity(ActivityThread.java:2023)。应用程序。活动线程。handleLaunchActivity(ActivityThread.java:2084)

共有2个答案

温翔宇
2023-03-14

有两个问题,你有一个输入错误:

1) 不耐烦。putExtra(“image_id:,painting.getId());

image\u id:中有一个冒号,而相应的密钥检索没有冒号。这就解释了你的空。

2)在您的检索中,停止转换为整数,而是使用getIntExtra("image_id")代替getStringExtra

将来,您还可以在尝试检索之前,使用getIntent(),检查您的Intent Bundle是否包含要查找的密钥,以防止null异常导致应用程序崩溃。hasExtra(“钥匙”)

诸葛立果
2023-03-14

改变

art.setImageDrawable(getResources().getDrawable(Integer.parseInt(getExtra())));

通过

art.setImageResource(Integer.parseInt(getExtra()));
 类似资料:
  • 问题内容: 我目前正在尝试获取通过REST API调用获取的数据,将其解析为所需的信息,然后将该信息传递给新活动。我使用的是异步HTTP客户端从loopj.com为REST客户端,然后使用我下面的代码,并为当前和未来的活动,分别。 Eclipse不会为我的任何代码传递任何错误,但是当我尝试在模拟器中运行时,当新的活动/视图打开时,我什么也没得到(即白屏)。我尝试在REST CLIENT中使用其他U

  • 次要活动(通过意图向主活动发送“endpoint”字符串): 主活动(从次要活动获取字符串): 在Fragment类上,我试图在TextView上显示数据: 如何修复它并将字符串从一个活动发送到另一个活动上的片段? 下面是XML:

  • 我试图将图像从一个活动发送到另一个活动,但我不知道如何设置ImageView。

  • 在Android中,我需要将第二个页面滑动到另一个页面上。 布局1覆盖页面左侧的80%。布局2显示其余的20%。往右走。 然后我需要拖动/滑动布局2在布局1的顶部,并将其滑回。

  • 我是新的Android和建立一个小应用程序,从相机拍照,并保存到画廊。 下面是捕获图像的函数。 这是我们的主要活动。xml 当图像被捕获时,我想在另一个活动(页面)上显示图像,而不是在具有捕获图像按钮的同一活动上。如何做到这一点。 提前谢谢