2016-10-04 9 views
1

通常のJavaクラスでページングしようとすると問題はありますが、これは既にAndroidアプリケーションで行われていれば「あなたは権限がありませんユーザーエージェントは、アンドロイドのマニフェストに指定されている間のアクセス「に別のスレッドで、インターネットとこのすべてを使用する権限を持っている、誰かJsoupを使ってページを取得できません

public void onClick(View view) 
{ 
    new Thread(new Runnable() { 
     @Override 
     public void run() 
     { 
      go(); 
     } 
    }).start(); 
} 
private void go() 
{ 

    try { 
     document = Jsoup.connect("http://issa.beltelecom.by/main.html").userAgent("Chrome 53.0.2785.143").ignoreHttpErrors(true).get(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 
+0

あなたはバックグラウンドタスクでそれを実行してみましたか? –

+0

はい、当然です。 – Grauen

答えて

0

を行います。

一般的に、jsoupを使用して接続が拒否された場合は、要求を調べて(たとえば、chrome開発ツール/ F12のネットワークタブを使用して)、見つからないヘッダーフィールドを追加します。

サンプルコード

String userAgent = "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36"; 
String url = "https://issa.beltelecom.by/main.html"; 
String acceptValue = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8"; 
String host = "issa.beltelecom.by"; 

document = Jsoup.connect(url).header("Accept",acceptValue).header("Host", host).userAgent(userAgent).get(); 
+0

ありがとうございました。同意して同意しました。 – Grauen

+0

@Grauenご意見ありがとうございます。 –

0

あなたはこれを試すことができ、この問題に直面することができ、あなたのOnClickListenerを設定バックグラウンドタスクを呼び出す。その後

new MyAsyncTask().execute(); 

Acceptヘッダフィールド(注:アンドロイド5.1.1デバイスでテスト)を設定することが重要であると考えられるあなたのタスク

private class MyAsyncTask extends AsyncTask<Void, Void, Boolean> { 

      protected void onPreExecute() { 
       super.onPreExecute(); 
       //do anything here 
      } 

      protected Boolean doInBackground(Void...param) { 

       Document document = null; 
       try { 
        document = Jsoup.connect(getString(R.string.your_url_string)).get(); 

       } catch (IOException e) { 
        e.printStackTrace(); 
       } 

       if (document != null) { 
        Elements yourElements = document.select("#element_id"); 

        //Do anything here 
        return true; 
       } 
       //Document is null 
       return false; 
      } 

      protected void onPostExecute(Boolean result) { 
       if(result==true) { 
        // do this 
       } 
      } 
     } 
+0

これはうまくいきません。ここで主な問題はサーバーがページへのアクセスをブロックすることですが、通常のJavaクラスで同じコードを実行するとすべてが動作します – Grauen

+0

通常のJavaクラスを実行し、それを実行すると、それはそれをブロックするあなたのサーバーではないと思います。しかし、あなたは何か間違っている。 –

+0

他のサイトはすべて正常に動作しています – Grauen

関連する問題