-2

iOSアプリケーションをAndroidに変換しようとしています。しかし、私は数日前に Java の学習を始めたばかりです。HTML内のタグから値を取得しようとしています。

これが私の迅速なコードです:

if let url = NSURL(string: "http://www.example.com/") {
        let htmlData: NSData = NSData(contentsOfURL: url)!
        let htmlParser = TFHpple(HTMLData: htmlData)


        //the value which i want to parse
        let nPrice = htmlParser.searchWithXPathQuery("//div[@class='round-border']/div[1]/div[2]") as NSArray

        let rPrice = NSMutableString()

        //Appending
        for element in nPrice {
            rPrice.appendString("\n\(element.raw)")
        }
        let raw = String(NSString(string: rPrice))

        //the value without trimming    
        let stringPrice = raw.stringByReplacingOccurrencesOfString("<[^>]+>", withString: "", options: .RegularExpressionSearch, range: nil)

        //result
        let trimPrice = stringPrice.stringByReplacingOccurrencesOfString("^\\n*", withString: "", options: .RegularExpressionSearch)
}

これがJsoupを使用した私のJavaコードです

public class Quote extends Activity {


    TextView price;
    String tmp;

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


        price  = (TextView) findViewById(R.id.textView3);

        try {
            doc = Jsoup.connect("http://example.com/").get();

            Element content = doc.getElementsByTag("//div[@class='round-border']/div[1]/div[2]");
        } catch (IOException e) {
            //e.printStackTrace();
        }

    }
}

私の問題は次のとおりです。

  1. コードを試すたびに NetworkOnMainThreatException が発生しました。
  2. この構造で getElementByTag を使用することが正しいかどうかはわかりません。

助けてください、ありがとう。

4

1 に答える 1

1
  1. コードを試すたびに NetworkOnMainThreatException が発生しました。

Jsoup の代わりに Volley を使用する必要があります。これは、より高速で効率的な代替手段になります。サンプルコードについては、この回答を参照してください。

  1. この構造で getElementByTag を使用することが正しいかどうかはわかりません。
Element content = doc.getElementsByTag("//div[@class='round-border']/div[1]/div[2]");

Jsoup は xPath を理解していません。代わりに CSS セレクターで動作します。上記のコード行は、次のように修正できます。

Elements divs = doc.select("div.round-border > div:nth-child(1) > div:nth-child(2)");

for(Element div : divs) {
    // Process each div here...
}
于 2016-05-17T08:03:39.787 に答える