-1

ここに私のコードの一部があります:

protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_lyrics_display);
    setupActionBar();

    TextView ArtistName = (TextView)findViewById(R.id.aname);
    TextView SongName = (TextView)findViewById(R.id.sname);

     // Get the message from the intent
    Intent intent = getIntent();
    String message = intent.getStringExtra(MainActivity.EXTRA_MESSAGE);
    String message2 = intent.getStringExtra(MainActivity.EXTRA_MESSAGE2);

    // Create the text view
    ArtistName.setTextSize(12);
    ArtistName.setText(message);
    SongName.setTextSize(12);
    SongName.setText(message2);
    getLyrics(message , message2);
}

@SuppressLint("DefaultLocale")
public void getLyrics(String message , String message2) {

    final TextView LyricsContent = (TextView)findViewById(R.id.lyricscontent);
    Document doc = null;
    String  url = "http://api.chartlyrics.com/apiv1.asmx/SearchLyricDirect?artist="+message.toLowerCase()+"&song="+message2.toLowerCase();
    LyricsContent.setText(url);
    try {
        doc = Jsoup.connect(url).get();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }           
}

入力後は常に停止します(文字列メッセージ、文字列メッセージ2)。私はすでにそれを持っています: android.permission.INTERNET android.persmission.ACCESS_NETWORK_STATE/>

そして、jsoupの部分を削除すると動作します。どこが悪いのでしょうか?

4

2 に答える 2

1

こんにちは、アプリケーションにもこれがありました。

解決策は非常に簡単です。

すべての Jsoup アクションは、非同期タスクまたはスレッドで実行する必要があります

私は個人的に次のような Asynctask を使用します。

アクティビティの前にコードの上に文字列の歌詞がある

    private class LoadLyric extends AsyncTask<Void, Void, Void> {

    @Override
    protected void onPostExecute(Void result) {
        // TODO Auto-generated method stub
        super.onPostExecute(result);
        // Here you can do any UI operations like textview.setText("test");
    }

    @Override
    protected Void doInBackground(Void... params) {
        // TODO Auto-generated method stub
    Document doc = null;
    try {
        doc = Jsoup.connect(url).get();
        lyrics = doc.text(); // or atleast do something like doc.getElementsByTag("Lyric"); in your case

    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    return null;
}
于 2013-03-11T17:41:23.473 に答える
0

よくわかりませんが、アクティビティで接続する必要はなく、getLyrics() を呼び出します。

@SuppressLint("DefaultLocale")
public void getLyrics(String message , String message2) {
new Thread(new Runnable() {
    public void run() {
        final TextView LyricsContent = (TextView)findViewById(R.id.lyricscontent);
        Document doc = null;
        String  url = "http://api.chartlyrics.com/apiv1.asmx/SearchLyricDirect?artist="+message.toLowerCase()+"&song="+message2.toLowerCase();
        LyricsContent.setText(url);
    try {
        doc = Jsoup.connect(url).get();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }           
}
}).start();
}
于 2014-07-17T22:53:47.003 に答える