【问题标题】:Android app- No such method exceptionAndroid 应用程序 - 没有这样的方法异常
【发布时间】:2012-07-28 06:44:16
【问题描述】:

我正在尝试创建一个涉及按下拍照按钮的 android 应用程序。我的代码很干净,没有任何警告或错误,但是当我在模拟器上运行它时,只要我按下应用程序中的照片按钮,它就会说你的应用程序已停止。当我检查日志文件以获取它给出的解释时我以下

任何帮助将不胜感激。提前谢谢你。

    07-27 20:44:11.676: E/AndroidRuntime(453): FATAL EXCEPTION: main
    07-27 20:44:11.676: E/AndroidRuntime(453): java.lang.IllegalStateException: Could not find a method dispatchTakePhotoIntent(View) in the activity class com.example.mydressingroom.MainActivity for onClick handler on view class android.widget.Button
    07-27 20:44:11.676: E/AndroidRuntime(453):  at android.view.View$1.onClick(View.java:3026)
    07-27 20:44:11.676: E/AndroidRuntime(453):  at android.view.View.performClick(View.java:3480)
    07-27 20:44:11.676: E/AndroidRuntime(453):  at android.view.View$PerformClick.run(View.java:13983)
    07-27 20:44:11.676: E/AndroidRuntime(453):  at android.os.Handler.handleCallback(Handler.java:605)
    07-27 20:44:11.676: E/AndroidRuntime(453):  at android.os.Handler.dispatchMessage(Handler.java:92)
    07-27 20:44:11.676: E/AndroidRuntime(453):  at android.os.Looper.loop(Looper.java:137)
    07-27 20:44:11.676: E/AndroidRuntime(453):  at android.app.ActivityThread.main(ActivityThread.java:4340)
    07-27 20:44:11.676: E/AndroidRuntime(453):  at java.lang.reflect.Method.invokeNative(Native Method)
    07-27 20:44:11.676: E/AndroidRuntime(453):  at java.lang.reflect.Method.invoke(Method.java:511)
    07-27 20:44:11.676: E/AndroidRuntime(453):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
    07-27 20:44:11.676: E/AndroidRuntime(453):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
    07-27 20:44:11.676: E/AndroidRuntime(453):  at dalvik.system.NativeStart.main(Native Method)
    07-27 20:44:11.676: E/AndroidRuntime(453): Caused by: java.lang.NoSuchMethodException: dispatchTakePhotoIntent [class android.view.View]
    07-27 20:44:11.676: E/AndroidRuntime(453):  at java.lang.Class.getConstructorOrMethod(Class.java:460)
    07-27 20:44:11.676: E/AndroidRuntime(453):  at java.lang.Class.getMethod(Class.java:915)
    07-27 20:44:11.676: E/AndroidRuntime(453):  at android.view.View$1.onClick(View.java:3019)
    07-27 20:44:11.676: E/AndroidRuntime(453):  ... 11 more

这是我的代码

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.provider.MediaStore;

public class MainActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    }


    /** Called when the user clicks the Photo button */
    public void dispatchTakePhotoIntent(int actionCode) {
          Intent takePhotoIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
          startActivityForResult(takePhotoIntent, actionCode);
    }

}

【问题讨论】:

    标签: java android illegalstateexception


    【解决方案1】:

    错误提示:找不到方法dispatchTakePhotoIntent(View)

    您使用 View 对象作为参数调用 dispatchTakePhotoIntent,而在您的代码中您已定义:

    public void dispatchTakePhotoIntent(int actionCode) 
    

    将整数作为参数。

    您在代码中调用方法的方式存在问题。

    【讨论】:

    • 感谢您的回复,这确实解释了问题所在,但是,我是 android 新手,请您解释一下如何将整数而不是视图发送到 dispatchTakePhotoIntent(int actionCode)?再次提前致谢。
    • 嘿,我一直在线并一直在向您发送消息,但您已退出。我仍然在线
    • 我实际上认为这个答案是最直接的。我遇到了同样的问题,并意识到这是因为我错过了被传递给无参数函数的 View 元素。赞成。
    【解决方案2】:

    在调用该方法的类中创建一个常量

      private static final int TAKE_PHOTO_REQUEST = 100;
    

    并将方法调用为

      dispatchTakePhotoIntent(TAKE_PHOTO_REQUEST);
    

    在你的方法中测试请求代码:

      public void dispatchTakePhotoIntent(int actionCode) {
        if (actionCode == 100) {
            Intent takePhotoIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
            startActivityForResult(takePhotoIntent, actionCode);
        }
      }
    

    问题是您通过将渲染/显示图像的视图而不是您想要执行的操作传递给该方法来调用该方法。因此,编译器找到了对 dispatchTakePhotoIntent(View) 类型方法的调用,因为您已经定义了 dispatchTakePhotoIntent(int),所以它无法在您的代码中找到该方法。

    如果您在 Eclipse 中开发,您的代码中应该会出现错误(错误所在的行上有一个红叉)。

    【讨论】:

      【解决方案3】:

      在视图类 android.widget.Button 上的 onClick 处理程序的活动类 com.example.mydressingroom.MainActivity 中找不到方法 dispatchTakePhotoIntent(View)

      看来您可能正在向方法发送视图,而不是发送您在方法属性中定义的整数。

      【讨论】:

      • 感谢您的回复,这确实解释了问题所在,但是,我是 android 新手,请您解释一下如何将整数而不是视图发送到 dispatchTakePhotoIntent(int actionCode)?再次提前致谢。
      猜你喜欢
      • 1970-01-01
      • 2023-04-04
      • 2012-04-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-21
      • 2011-07-27
      • 2023-03-03
      相关资源
      最近更新 更多