Android:致命异常问题:尝试在单击按钮时调用方法

标签 android exception button methods logcat

我在编写应用程序方面有点新手,我正在处理一个学校项目。我刚刚完成程序,现在正在调试。我遇到了一个似乎无法解决的重大问题,涉及在单击按钮时调用方法。该程序旨在在用户键入搜索词后下载文件。

最初,我的 logcat 告诉我在 HelloTabWidget 类中找不到该方法。我最初在 SearchActivity 类中有 findSong 方法,所以我将几乎所有代码从 SearchActivity 移到 HelloTabWidget 中,因为这似乎是一种查看所有内容的简单方法。现在,我已经尝试了这里的提示,即从 onClick 更改 xml 中的路径,但这也没有解决它。相反,我得到了以前的过去错误:“在 Activity HelloTabWidget 中找不到方法 com.android.iPirate.HelloTabWidget.findSong ...”我开始认为它与方法中添加的异常有关。但我几乎不知道可以做些什么来解决这个问题。任何帮助,将不胜感激。

这是 HelloTabWidget:

package com.android.iPirate;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.URL;
import java.net.URLConnection;
import java.util.HashSet;
import java.util.Scanner;
import java.util.Set;

>import android.app.Activity;
import android.app.TabActivity;
import android.content.Intent;
import android.content.res.Resources;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TabHost;
import android.widget.TextView;


public class HelloTabWidget extends TabActivity {

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        Resources res = getResources(); // Resource object to get Drawables
        TabHost tabHost = getTabHost();  // The activity TabHost
        TabHost.TabSpec spec;  // Reusable TabSpec for each tab
        Intent intent;  // Reusable Intent for each tab

        // Create an Intent to launch an Activity for the tab (to be reused)
        intent = new Intent().setClass(this, SearchActivity.class);

        // Initialize a TabSpec for each tab and add it to the TabHost


        // Do the same for the other tabs

        intent = new Intent().setClass(this, SongsActivity.class);
        spec = tabHost.newTabSpec("songs").setIndicator("Songs",
                          res.getDrawable(R.drawable.ic_tab_artists))
                      .setContent(intent);
        tabHost.addTab(spec);

        intent = new Intent().setClass(this, SettingsActivity.class);
        spec = tabHost.newTabSpec("settings").setIndicator("Instructions",
                          res.getDrawable(R.drawable.ic_tab_settings))
                      .setContent(intent);
        tabHost.addTab(spec);

        tabHost.setCurrentTab(2); }

    public String searchTerm;
    public String quotes = "";
    public String title;
    public EditText edittext;
    public String youTubeURL;
    public Set<String> names = new HashSet<String>();


        public void findSong(View view) throws Exception {
            edittext = (EditText) findViewById(R.id.edittext); 
            searchTerm = edittext.getText().toString();
            String address;
            address = getURL(searchTerm);
            UrlDownload.fileUrl(address, title + ".mp3", "/");
        }

        public void findPlaylist(View view) throws Exception{
            findSong(view);
            String[] pageNames = getLinks(youTubeURL);
            for(String name : pageNames)
                if (!names.contains(name))
                    UrlDownload.fileUrl(getURL(name), title + ".mp3", "/");
        }

        public static String[] getLinks(String link) throws Exception {
            URL url = new URL(link);
            BufferedReader in = new BufferedReader(
                    new InputStreamReader(
                    url.openStream()));
            Scanner input = new Scanner(in);
            String[] songs = new String[15];
            for(int i = 0; i < 15; i++)
                songs[i] = nextTitle(input);
            return songs;
        }

        public static String nextTitle(Scanner input){
            while (input.hasNextLine()){
                String inputLine = input.nextLine();
                if (inputLine.contains("<span dir=\"ltr\" class=\"title\" title=\"")){
                    return inputLine.substring
                    (inputLine.indexOf("<span dir=\"ltr\" class=\"title\" title=\"") + 37, inputLine.indexOf(">")-1);
                }
            }
            return null;
        }

        public String getURL(String searchString) throws Exception {
            String searchQuery = searchString.replace(' ','+');
            String siteURL = new String("http://www.youtube.com/results?search_query="+searchQuery+ "&aq=f\"");
            URL url;
            url = new URL(siteURL);
            BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream()));
            Scanner input = new Scanner(in);
            String videoLink = "";
            String fLink = null;
            while(input.hasNextLine()){
                String line = input.nextLine();
                if(line.contains("<!-- start search results -->")){
                    for(int i = 0; i <= 44; i++){
                        line = input.nextLine();
                    }
                    youTubeURL = "www.youtube.com/"+line.substring(line.indexOf("<a href=")+8, line.indexOf("class")-2);
                    videoLink = "http://www.video2mp3.net/index.php?url=" + youTubeURL;
                    title = line.substring(line.indexOf("title="+6),line.indexOf(quotes,line.indexOf("title")+7)-1);
                    names.add(title);
                    break;
                }
            }
            URL vurl = null;
            vurl = new URL(videoLink);
            BufferedReader in2;
            in2 = new BufferedReader(new InputStreamReader(vurl.openStream()));
            Scanner input2 = new Scanner(in2);
            while(input2.hasNextLine()){
                String line = input.nextLine();
                if(line.contains("Conversion successfully completed!")){
                    line = input.nextLine();
                    line = input.nextLine();
                    fLink = line.substring(line.indexOf("http"),line.indexOf("/'"));
                    break;
                }
            }
            URL furl;
            furl = new URL(fLink);
            BufferedReader in3 = new BufferedReader(new InputStreamReader(furl.openStream()));
            Scanner input3 = new Scanner(in3);
            while(input3.hasNextLine()){
                String line = input.nextLine();
                if(line.contains("Wait 20 seconds or click here")){
                    line = input.nextLine();
                    String line2 = input.nextLine();
                    String line3 = input.nextLine();
                    String line4 = input.nextLine();
                    if(line2.contains(".mp3"))
                        return line.substring(line.indexOf("tt"+3)) + line2.substring(0,line2.indexOf(".mp3")+4);
                    else if(line3.contains(".mp3"))
                        return line.substring(line.indexOf("tt"+3)) + line2 + line3.substring(0,line3.indexOf(".mp3")+4);
                    else if(line4.contains(".mp3")){
                        return line.substring(line.indexOf("tt"+3)) + line2 + line3 + line4.substring(0,line4.indexOf(".mp3")+4);
                    }
                }
            }   
            return "";
        }

        public void savemp3(String s) throws Exception{
            URLConnection conn = new URL(s).openConnection();
            InputStream is = conn.getInputStream();

            OutputStream outstream = new FileOutputStream(new File(title + ".mp3"));
            byte[] buffer = new byte[4096];
            int len;
            while ((len = is.read(buffer)) > 0) {
                outstream.write(buffer, 0, len);
            }
            outstream.close();
        }
    }

现在是 XML:

<?xml version="1.0" encoding="utf-8"?>
<TabHost xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@android:id/tabhost"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    <LinearLayout
        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:padding="5dp">
        <EditText
        android:id="@+id/edittext"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"/>
        <Button
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:text="Find Song"
        android:onClick="findSong" />
        <Button
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:text="Find Playlist"
        android:onClick="findPlaylist" />

        <TabWidget
            android:id="@android:id/tabs"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content" />
        <FrameLayout
            android:id="@android:id/tabcontent"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:padding="5dp"/>




    </LinearLayout>
</TabHost>

list :

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
     package="com.android.iPirate"
     android:versionCode="1"
     android:versionName="1.0">
    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:name=".HelloTabWidget"
                 android:label="@string/app_name"
                 android:theme="@android:style/Theme.NoTitleBar">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    <activity android:name=".SettingsActivity"
                 android:label="@string/app_name"
                 android:theme="@android:style/Theme.NoTitleBar">
        </activity>
  <activity android:name=".SearchActivity"
                 android:label="@string/app_name"
                 android:theme="@android:style/Theme.NoTitleBar">
        </activity>
          <activity android:name=".SongsActivity"
                 android:label="@string/app_name"
                 android:theme="@android:style/Theme.NoTitleBar">
        </activity>
    </application>
    <uses-sdk android:minSdkVersion="8" />

</manifest>

和 Logcat:

12-06 14:35:33.603: ERROR/AndroidRuntime(4157): FATAL EXCEPTION: main
12-06 14:35:33.603: ERROR/AndroidRuntime(4157): java.lang.IllegalStateException: Could not execute method of the activity
12-06 14:35:33.603: ERROR/AndroidRuntime(4157):     at android.view.View$1.onClick(View.java:2072)
12-06 14:35:33.603: ERROR/AndroidRuntime(4157):     at android.view.View.performClick(View.java:2408)
12-06 14:35:33.603: ERROR/AndroidRuntime(4157):     at android.view.View$PerformClick.run(View.java:8816)
12-06 14:35:33.603: ERROR/AndroidRuntime(4157):     at android.os.Handler.handleCallback(Handler.java:587)
12-06 14:35:33.603: ERROR/AndroidRuntime(4157):     at android.os.Handler.dispatchMessage(Handler.java:92)
12-06 14:35:33.603: ERROR/AndroidRuntime(4157):     at android.os.Looper.loop(Looper.java:123)
12-06 14:35:33.603: ERROR/AndroidRuntime(4157):     at android.app.ActivityThread.main(ActivityThread.java:4627)
12-06 14:35:33.603: ERROR/AndroidRuntime(4157):     at java.lang.reflect.Method.invokeNative(Native Method)
12-06 14:35:33.603: ERROR/AndroidRuntime(4157):     at java.lang.reflect.Method.invoke(Method.java:521)
12-06 14:35:33.603: ERROR/AndroidRuntime(4157):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
12-06 14:35:33.603: ERROR/AndroidRuntime(4157):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
12-06 14:35:33.603: ERROR/AndroidRuntime(4157):     at dalvik.system.NativeStart.main(Native Method)
12-06 14:35:33.603: ERROR/AndroidRuntime(4157): Caused by: java.lang.reflect.InvocationTargetException
12-06 14:35:33.603: ERROR/AndroidRuntime(4157):     at com.android.iPirate.HelloTabWidget.findSong(HelloTabWidget.java:71)
12-06 14:35:33.603: ERROR/AndroidRuntime(4157):     at java.lang.reflect.Method.invokeNative(Native Method)
12-06 14:35:33.603: ERROR/AndroidRuntime(4157):     at java.lang.reflect.Method.invoke(Method.java:521)
12-06 14:35:33.603: ERROR/AndroidRuntime(4157):     at android.view.View$1.onClick(View.java:2067)
12-06 14:35:33.603: ERROR/AndroidRuntime(4157):     ... 11 more
12-06 14:35:33.603: ERROR/AndroidRuntime(4157): Caused by: java.net.SocketException: Permission denied
12-06 14:35:33.603: ERROR/AndroidRuntime(4157):     at org.apache.harmony.luni.platform.OSNetworkSystem.createStreamSocketImpl(Native Method)
12-06 14:35:33.603: ERROR/AndroidRuntime(4157):     at org.apache.harmony.luni.platform.OSNetworkSystem.createStreamSocket(OSNetworkSystem.java:186)
12-06 14:35:33.603: ERROR/AndroidRuntime(4157):     at org.apache.harmony.luni.net.PlainSocketImpl.create(PlainSocketImpl.java:265)
12-06 14:35:33.603: ERROR/AndroidRuntime(4157):     at java.net.Socket.checkClosedAndCreate(Socket.java:873)
12-06 14:35:33.603: ERROR/AndroidRuntime(4157):     at java.net.Socket.connect(Socket.java:1020)
12-06 14:35:33.603: ERROR/AndroidRuntime(4157):     at org.apache.harmony.luni.internal.net.www.protocol.http.HttpConnection.<init>(HttpConnection.java:62)
12-06 14:35:33.603: ERROR/AndroidRuntime(4157):     at org.apache.harmony.luni.internal.net.www.protocol.http.HttpConnectionPool.get(HttpConnectionPool.java:88)
12-06 14:35:33.603: ERROR/AndroidRuntime(4157):     at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.getHTTPConnection(HttpURLConnectionImpl.java:927)
12-06 14:35:33.603: ERROR/AndroidRuntime(4157):     at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:909)
12-06 14:35:33.603: ERROR/AndroidRuntime(4157):     at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:1152)
12-06 14:35:33.603: ERROR/AndroidRuntime(4157):     at java.net.URL.openStream(URL.java:653)
12-06 14:35:33.603: ERROR/AndroidRuntime(4157):     at com.android.iPirate.HelloTabWidget.getURL(HelloTabWidget.java:111)
12-06 14:35:33.603: ERROR/AndroidRuntime(4157):     ... 15 more

感谢您的帮助。

新的日志:

>12-06 16:34:30.585: ERROR/AndroidRuntime(4870): FATAL EXCEPTION: main
12-06 16:34:30.585: ERROR/AndroidRuntime(4870): java.lang.IllegalStateException: Could not execute method of the activity
12-06 16:34:30.585: ERROR/AndroidRuntime(4870):     at android.view.View$1.onClick(View.java:2072)
12-06 16:34:30.585: ERROR/AndroidRuntime(4870):     at android.view.View.performClick(View.java:2408)
12-06 16:34:30.585: ERROR/AndroidRuntime(4870):     at android.view.View$PerformClick.run(View.java:8816)
12-06 16:34:30.585: ERROR/AndroidRuntime(4870):     at android.os.Handler.handleCallback(Handler.java:587)
12-06 16:34:30.585: ERROR/AndroidRuntime(4870):     at android.os.Handler.dispatchMessage(Handler.java:92)
12-06 16:34:30.585: ERROR/AndroidRuntime(4870):     at android.os.Looper.loop(Looper.java:123)
12-06 16:34:30.585: ERROR/AndroidRuntime(4870):     at android.app.ActivityThread.main(ActivityThread.java:4627)
12-06 16:34:30.585: ERROR/AndroidRuntime(4870):     at java.lang.reflect.Method.invokeNative(Native Method)
12-06 16:34:30.585: ERROR/AndroidRuntime(4870):     at java.lang.reflect.Method.invoke(Method.java:521)
12-06 16:34:30.585: ERROR/AndroidRuntime(4870):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
12-06 16:34:30.585: ERROR/AndroidRuntime(4870):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
12-06 16:34:30.585: ERROR/AndroidRuntime(4870):     at dalvik.system.NativeStart.main(Native Method)
12-06 16:34:30.585: ERROR/AndroidRuntime(4870): Caused by: java.lang.reflect.InvocationTargetException
12-06 16:34:30.585: ERROR/AndroidRuntime(4870):     at com.android.iPirate.HelloTabWidget.findSong(HelloTabWidget.java:71)
12-06 16:34:30.585: ERROR/AndroidRuntime(4870):     at java.lang.reflect.Method.invokeNative(Native Method)
12-06 16:34:30.585: ERROR/AndroidRuntime(4870):     at java.lang.reflect.Method.invoke(Method.java:521)
12-06 16:34:30.585: ERROR/AndroidRuntime(4870):     at android.view.View$1.onClick(View.java:2067)
12-06 16:34:30.585: ERROR/AndroidRuntime(4870):     ... 11 more
12-06 16:34:30.585: ERROR/AndroidRuntime(4870): Caused by: java.net.MalformedURLException: Protocol not found: 
12-06 16:34:30.585: ERROR/AndroidRuntime(4870):     at java.net.URL.<init>(URL.java:275)
12-06 16:34:30.585: ERROR/AndroidRuntime(4870):     at java.net.URL.<init>(URL.java:159)
12-06 16:34:30.585: ERROR/AndroidRuntime(4870):     at com.android.iPirate.HelloTabWidget.getURL(HelloTabWidget.java:129)
12-06 16:34:30.585: ERROR/AndroidRuntime(4870):     ... 15 more

感谢帮助我引用的人。想不通他们! :D

最佳答案

我怀疑是因为您打开了套接字,但没有声明INTERNET 权限。尝试将此添加到 标记外的 list 中。

<uses-permission android:name="android.permission.INTERNET"/>

关于Android:致命异常问题:尝试在单击按钮时调用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4371330/

相关文章:

WPF如何还原Button背景色

html - CSS 按钮悬停效果(边框更改、背景更改)不起作用

android - 带 Cookie(或 header )的 VideoView

java - 由于包含在布局中的 NullPointerException 而获取 "Unfortunately, my_app has stopped."

java - 更改工具栏溢出图标颜色

c# - 什么可能导致 System.Windows.Forms.InputLanguage.CreateInputLanguageChangingEventArgs 中的溢出异常

c# - 自定义代码合约异常消息

Android 操作栏 Sherlock 始终在下拉列表中显示操作项

C++ MSVC - 显示未捕获的异常消息

xcode - 使用标签作为按钮 - 当标签被触摸时,将值赋给一个字符串