为了账号安全,请及时绑定邮箱和手机立即绑定

E / AndroidRuntime:致命例外:main java.lang.Illegal

E / AndroidRuntime:致命例外:main java.lang.Illegal

呼如林 2021-04-09 18:15:08
当仅创建一个按钮时,一切运行良好,但是每当我为不同的按钮创建一种方法时,就会出现以下错误:E/AndroidRuntime: FATAL EXCEPTION: main java.lang.IllegalStateException: Could not execute method for android:onClick   Caused by: java.lang.reflect.InvocationTargetException   Caused by: android.content.res.Resources$NotFoundException: Resource ID #0x0请帮助。这是我的MainActivity.java代码: package com.example.chakshu.griddemo; import android.media.MediaPlayer; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View;  public class MainActivity extends AppCompatActivity {    @Override    protected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.activity_main);    }   public void pressed(View view) {    int id = view.getId();    String ourId = "";    ourId = view.getResources().getResourceEntryName(id);    int resourceId = getResources().getIdentifier(ourId, "raw",     "com.example.chakshu.griddemo");    MediaPlayer mplayer = MediaPlayer.create(this, resourceId);    mplayer.start();    }
查看完整描述

2 回答

?
饮歌长啸

TA贡献1951条经验 获得超3个赞

我认为真正的错误在中间,这行android.content.res.Resources$NotFoundException: Resource ID #0x0 at提示它找不到您传入的资源。

您传递的资源通常类似于 R.raw.my_resource_name


查看完整回答
反对 回复 2021-04-21
?
ABOUTYOU

TA贡献1812条经验 获得超5个赞

问题是在以下代码中找不到有效的资源ID:


public void pressed(View view) {


    int id = view.getId();

    String ourId = "";


    ourId = view.getResources().getResourceEntryName(id);


    int resourceId = getResources().getIdentifier(ourId, "raw", 

    "com.example.chakshu.griddemo");


    ...

}

由于该ID不存在,将在其中抛出getResourceEntryName(),如果找不到有效的资源ID Resources.NotFoundException,则getIdentifier将返回0。


因此,将您的点击监听器方法更新为以下内容:


public void pressed(View view) {


    int id = view.getId();


    try {

      String ourId = getResources().getResourceEntryName(id);

      int resId = getResources().getIdentifier(ourId, "raw", getPackageName());


      if(resId == 0) {

        Log.d("MainActivity", "error, no found raw");

      } else {

        MediaPlayer mplayer = MediaPlayer.create(this, resourceId);

        mplayer.start();

      }

    } catch(NotFoundException e) {

      Log.d("MainActivity", "error, no found resource = " + e.toString);

    }



}

而是根据按钮ID名称,尝试使用android:tag和[getTag][3]方法。例如,使用以下按钮:


<Button

    android:text="A"

    android:tag="raw_resource_name"

    android:layout_width="wrap_content"

    android:layout_height="wrap_content"

    android:id="@+id/button"

    android:layout_column="0"

    android:layout_row="0"

    android:layout_gravity="fill"

    android:layout_columnWeight="1"

    android:layout_rowWeight="1"

    android:onClick="pressed"/>

然后,您可以使用以下代码:


public void pressed(View view) {


  String resName = (String) view.getTag();

  int resId = getResources().getIdentifier(resName, "raw", getPackageName());


  if(resId == 0) {

     Log.d("MainActivity", "error, no found raw");

  } else {

     MediaPlayer mplayer = MediaPlayer.create(this, resourceId);

     mplayer.start();

  }

}


查看完整回答
反对 回复 2021-04-21
  • 2 回答
  • 0 关注
  • 394 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信