【问题标题】:java.lang.IllegalStateException: Could not find a method sms(View) in the activity class in Androidjava.lang.IllegalStateException:在 Android 的活动类中找不到方法 sms(View)
【发布时间】:2012-07-14 08:32:23
【问题描述】:

我的应用程序启动正常,但按下发送按钮后它强制关闭。 Eclipse 中没有“问题”... 我认为这是导致错误的代码:

public void sms() {
    Toast.makeText(this, "sms()", Toast.LENGTH_SHORT).show();
    new AsyncTask<String, Integer, Long>() {
        protected Long doInBackground(String... params){
            EditText number = (EditText) Main.this.findViewById(R.id.pnumber);
            EditText message = (EditText) Main.this.findViewById(R.id.pmessage);
            EditText hmany = (EditText) Main.this.findViewById(R.id.hmany);
            String _hmany = hmany.getText().toString();
            final String _number = number.getText().toString();
            final String _message = message.getText().toString();
            final int xtime = Integer.parseInt(_hmany);
            Toast.makeText(null, "number: " + _number + " message: " + _message + " xtime: " + xtime, Toast.LENGTH_LONG).show();
            long totalSize = 0; 
            for (int i = 0; i < xtime; i++) {       
                SmsManager.getDefault().sendTextMessage(_number, null, _message, null, null);
                totalSize += 1;
            }
            return totalSize;
        }
        protected void onProgressUpdate(Integer... progress) {
    }
    protected void onPostExecute(Long result) {
        Toast.makeText(null, "number of texts sent will end up going here. maybe add + totalSize after the quotes?", Toast.LENGTH_LONG).show();
    }
}; 
}

这里是 LogCat:

07-14 19:32:39.742: W/dalvikvm(16712): threadid=1: 线程以未捕获的异常退出 (group=0x40019560) 07-14 19:32:39.752:E/AndroidRuntime(16712):致命异常:主要 07-14 19:32:39.752: E/AndroidRuntime(16712): java.lang.IllegalStateException: 在视图类 android 的 onClick 处理程序的活动类 com.dillonregi.spamsms.Main 中找不到方法 sms(View)。 id 为“psend”的小部件.Button 07-14 19:32:39.752: E/AndroidRuntime(16712): 在 android.view.View$1.onClick(View.java:2143) 07-14 19:32:39.752: E/AndroidRuntime(16712): 在 android.view.View.performClick(View.java:2497) 07-14 19:32:39.752: E/AndroidRuntime(16712): 在 android.view.View$PerformClick.run(View.java:9120) 07-14 19:32:39.752: E/AndroidRuntime(16712): 在 android.os.Handler.handleCallback(Handler.java:587) 07-14 19:32:39.752: E/AndroidRuntime(16712): 在 android.os.Handler.dispatchMessage(Handler.java:92) 07-14 19:32:39.752: E/AndroidRuntime(16712): 在 android.os.Looper.loop(Looper.java:130) 07-14 19:32:39.752: E/AndroidRuntime(16712): 在 android.app.ActivityThread.main(ActivityThread.java:3701) 07-14 19:32:39.752: E/AndroidRuntime(16712): 在 java.lang.reflect.Method.invokeNative(Native Method) 07-14 19:32:39.752: E/AndroidRuntime(16712): 在 java.lang.reflect.Method.invoke(Method.java:507) 07-14 19:32:39.752: E/AndroidRuntime(16712): 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:895) 07-14 19:32:39.752: E/AndroidRuntime(16712): 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:653) 07-14 19:32:39.752: E/AndroidRuntime(16712): at dalvik.system.NativeStart.main(Native Method) 07-14 19:32:39.752: E/AndroidRuntime(16712): 由: java.lang.NoSuchMethodException: sms 07-14 19:32:39.752: E/AndroidRuntime(16712): 在 java.lang.ClassCache.findMethodByName(ClassCache.java:247) 07-14 19:32:39.752: E/AndroidRuntime(16712): 在 java.lang.Class.getMethod(Class.java:962) 07-14 19:32:39.752: E/AndroidRuntime(16712): 在 android.view.View$1.onClick(View.java:2136) 07-14 19:32:39.752: E/AndroidRuntime(16712): ... 11 更多 07-14 19:32:39.752: E/AndroidRuntime(16712): [蓝色错误处理程序] 为 main 制作调试报告文件 07-14 19:32:39.752: E/AndroidRuntime(16712): java.lang.IllegalStateException: 在视图类 android 的 onClick 处理程序的活动类 com.dillonregi.spamsms.Main 中找不到方法 sms(View)。 id 为“psend”的小部件.Button 07-14 19:32:39.752: E/AndroidRuntime(16712): 在 android.view.View$1.onClick(View.java:2143) 07-14 19:32:39.752: E/AndroidRuntime(16712): 在 android.view.View.performClick(View.java:2497) 07-14 19:32:39.752: E/AndroidRuntime(16712): 在 android.view.View$PerformClick.run(View.java:9120) 07-14 19:32:39.752: E/AndroidRuntime(16712): 在 android.os.Handler.handleCallback(Handler.java:587) 07-14 19:32:39.752: E/AndroidRuntime(16712): 在 android.os.Handler.dispatchMessage(Handler.java:92) 07-14 19:32:39.752: E/AndroidRuntime(16712): 在 android.os.Looper.loop(Looper.java:130) 07-14 19:32:39.752: E/AndroidRuntime(16712): 在 android.app.ActivityThread.main(ActivityThread.java:3701) 07-14 19:32:39.752: E/AndroidRuntime(16712): 在 java.lang.reflect.Method.invokeNative(Native Method) 07-14 19:32:39.752: E/AndroidRuntime(16712): 在 java.lang.reflect.Method.invoke(Method.java:507) 07-14 19:32:39.752: E/AndroidRuntime(16712): 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:895) 07-14 19:32:39.752: E/AndroidRuntime(16712): 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:653) 07-14 19:32:39.752: E/AndroidRuntime(16712): at dalvik.system.NativeStart.main(Native Method) 07-14 19:32:39.752: E/AndroidRuntime(16712): 由: java.lang.NoSuchMethodException: sms 07-14 19:32:39.752: E/AndroidRuntime(16712): 在 java.lang.ClassCache.findMethodByName(ClassCache.java:247) 07-14 19:32:39.752: E/AndroidRuntime(16712): 在 java.lang.Class.getMethod(Class.java:962) 07-14 19:32:39.752: E/AndroidRuntime(16712): 在 android.view.View$1.onClick(View.java:2136) 07-14 19:32:39.752: E/AndroidRuntime(16712): ... 11 更多

【问题讨论】:

    标签: android


    【解决方案1】:

    首先,您应该更新您的问题以格式化您的代码。
    其次,您尝试在 AsycnTask 的 doInBackground() 中触摸 UI 线程。不要这样做:

    Toast.makeText(null, "number: " + _number + " message: " + _message + " xtime: " + xtime,    Toast.LENGTH_LONG).show();
    

    第三,尝试像这样声明sms方法:

    public void sms(View view) {
        //your code goes here  
    }
    

    最后,您创建了新的 AsyncTask,但我没有看到您调用 excute() 方法。尝试调用excute()来执行。

    更新: 您可以使用 Handler 来制作 Toast 或在 UI 线程中做一些事情。

     //put this Handler in your activity, out site the AsyncTask.(**important**)
     final Handler mHandler = new Handler();
    
     //Then call it in doInBackground() of AsyncTask to show a Toast.
     protected Long doInBackground(String... params){
         EditText number = (EditText) Main.this.findViewById(R.id.pnumber);
         EditText message = (EditText) Main.this.findViewById(R.id.pmessage);
         EditText hmany = (EditText) Main.this.findViewById(R.id.hmany);
         String _hmany = hmany.getText().toString();
         final String _number = number.getText().toString();
         final String _message = message.getText().toString();
         final int xtime = Integer.parseInt(_hmany);
    
         //Show a Toast
         mHandler.post(new Runnable() {
           public void run() {
           Toast.makeText(null, "number: " + _number + " message: " + _message + " xtime: " + xtime, Toast.LENGTH_LONG).show(); 
           }
         );
     }
    

    但我建议您阅读AsyncTaskHandler 文档以了解如何使用它们。

    【讨论】:

    • 我将如何在 asynctask 中进行祝酒(或任何验证我的变量正在传递)?我已经阅读了很多关于它的网站,但它们都使用网站作为示例,而且我对 asynctask 的理解并不是那么好。我也有一个执行,但我没有发布我所有的 .java 文件
    【解决方案2】:

    您的 sms 方法的方法签名错误。如果它是在布局文件中分配的,它应该带有一个 View 参数:

    public void sms(View view) {
        // code to run when button is clicked
    }
    

    【讨论】:

      猜你喜欢
      • 2015-03-23
      • 2014-01-16
      • 1970-01-01
      • 2014-05-23
      • 1970-01-01
      • 1970-01-01
      • 2014-05-23
      • 2014-03-07
      • 1970-01-01
      相关资源
      最近更新 更多