私の問題は、現在.post()
、低速のサーバーにユーザー名とパスワードを入力しようとしていることです。メイン スレッドでのネットワーク コードの実行をバイパスすると、私の方法は正しく機能しました。怠け者になるのをやめてコードを AsyncTask スレッドに移動することにしましたが、JSOUP が.timeout()
設定した時間を無視し始め、408 エラーが発生しました。
これが私のコードです。ユーザー名とパスワードは検閲されています。URLも検閲されています。Logcat は、コードが正しく機能していることを示しています。
package com.example.androidgenparsetest;
import org.jsoup.Connection;
import org.jsoup.Connection.Method;
import org.jsoup.Connection.Response;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import java.io.IOException;
import java.util.Map;
import android.os.AsyncTask;
import android.widget.TextView;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
public class MainActivity extends Activity
{
@Override
protected void onCreate(Bundle savedInstanceState)
{
//StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
//StrictMode.setThreadPolicy(policy);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
new GetGenesis().execute("ca.com","ca3");
}
@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);
return true;
}
private class GetGenesis extends AsyncTask<String, Void, Document>
{
protected Document doInBackground(String... UserPass)
{
Document doc2 = null;
try
{
Connection.Response res = Jsoup
.connect("http://j_security_check")
.data("j_username",UserPass[0],"j_password",UserPass[1])
.method(Method.POST)
.userAgent("Mozilla/5.0 (Windows NT 6.0) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.46 Safari/536.5")
.timeout(2*1000)
.ignoreHttpErrors(true)
.execute();
Map<String, String> cookies = res.cookies();
doc2 = Jsoup
.connect("/j_security_check")
.data("j_username",UserPass[0],"j_password",UserPass[1])
.method(Method.POST)
.userAgent("Mozilla/5.0 (Windows NT 6.0) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.46 Safari/536.5")
.timeout(2*1000)
.ignoreHttpErrors(true)
.cookies(cookies)
.get();
}
catch (IOException e)
{
e.printStackTrace();
}
return doc2;
}
protected void onPostExecute(Document doc)
{
Document doc2=doc;
TextView htmltext=(TextView)findViewById(R.id.htmltext);
htmltext.setText(doc2.text());
}
}
}