0

JSoup を使用し、JAVA で Web サイトに正常に接続するコードがいくつかあります。

Android でまったく同じことを (学習体験として) 複製しようとしています。

私はエクリプスを使用しています。

私の activity_main.xml には、3 つのボタンとテキスト フィールドがあります。

JAVA コード内にエラーはなく、Java 内で引き続き動作することを確認しました (Netbeans で実行)。

libs フォルダー内に JSoup jar があります。これは、見つけるのに少し時間がかかった問題でした。

editText.setText(“Here”); を配置しました。コードがどこにあるかを確認します。

ドキュメントのすぐ下にメッセージがあります = JSoup.connect(“<a href="http://www.Google.com" rel="nofollow">http://www.Google.com”).get() ;

私はそのメッセージを決して受け取りません。

同様に、catch ルーチン内にも同じメッセージがあります。私は常に catch ルーチンに入り込んでいます。つまり、問題があるということです。

私はこれを 2 つの方法で試しました。Android エミュレーターを使用する方法と、USB ケーブルを介して電話を接続する方法です。同じ結果が得られます。「アプリ」は問題なく動作しますが、catch{} 内で見つかったメッセージが表示されます。

Netbeans / 通常の Java 内で正確なコードが正常に機能するため、途方に暮れています。

これが私のコードです:

package com.example.duckriver;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

import java.io.IOException;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import org.jsoup.helper.Validate;


public class MainActivity extends Activity {

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

int counter;
Button Button1;
Button SummaryStats;
TextView display;
TextView editText;

String dataread = null;
String high = "High:";
String low = "Low:";
String filename = null;
int index = 0;
int startindex = 0;
int lastindex = 0;
int length = 0;
char[] CharArray = new char[1000];



@Override
public boolean onCreateOptionsMenu(Menu menu)  
{
        // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);

    counter = 0;
    Button1 = (Button) findViewById(R.id.button1);
    SummaryStats = (Button) findViewById(R.id.buttonSummaryStats);
    display = (TextView) findViewById(R.id.tvMainDisplay);

    editText = (TextView) findViewById(R.id.editText);



    Button1.setOnClickListener(new View.OnClickListener()  {

        @Override
        public void onClick(View arg0) 
{
            // TODO Auto-generated method stub

            //counter++;


            Document doc;
            try{
                doc=Jsoup.connect("http://www.Google.com").get();
                editText.setText("Here");


        //get Title
                //String title = doc.title();
                //System.out.println("Title: "+title);

                //dataread = doc.body().text(); // "An example link"


                Element link = null;

            }//end try
            catch(Exception ex){
                ex.printStackTrace();
                editText.setText("Error");
                //((TextView)findViewById(R.id.tv)).setText("Error");
        }// end catch




        }
    });

    SummaryStats.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View arg0) {
            // TODO Auto-generated method stub
            counter = counter*counter;


        }
    });

    return true;
}

}

私は途方に暮れています。ヘルプ?

ありがとう。

4

1 に答える 1

1

非同期タスクを含むドキュメントをダウンロードする必要があります。そうしないと、Androidが例外をスローします。これを試して:

@Override
public boolean onCreateOptionsMenu(Menu menu)  
{
        // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);

    counter = 0;
    Button1 = (Button) findViewById(R.id.button1);
    SummaryStats = (Button) findViewById(R.id.buttonSummaryStats);
    display = (TextView) findViewById(R.id.tvMainDisplay);

    editText = (TextView) findViewById(R.id.editText);



    Button1.setOnClickListener(new View.OnClickListener()  {

        @Override
        public void onClick(View arg0) {
           downloadDocTask task = new downloadDocTask();
           task.execute("www.google.com");
         }
    });

    SummaryStats.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View arg0) {
            // TODO Auto-generated method stub
            counter = counter*counter;


        }
    });

    return true;
}


    private class downloadDocTask extends AsyncTask<String, Void, Document>{
        String urldisplay;
        @Override
        protected Document doInBackground(String... urls) {
            urldisplay = urls[0];
            Document doc = null;
            try {
                doc = Jsoup.connect(urldisplay).timeout(10*1000).get();
            } catch (IOException e) {
                e.printStackTrace();
            }
            return doc;
            }

        @Override
        protected void onPostExecute(Document result) {
            if(result != null){
                Log.i(TAG, "downloadDocTask.onPostExcecute Document Download complete");
                buildHtml(result);
            }
            else{
                Log.i(TAG, "downloadDocTask.onPostExcecute Document == null");
            }
        }

    }


public void buildHtml(Document doc){
   // Parse document here
   String title = doc.title();
}
于 2013-03-08T17:55:25.710 に答える