私のプログラムは学生のユーザー名とパスワードを要求し、ログインに成功すると、メイン ページの HTML ソース コードから学生の写真と名前を取得し、別のインテントまたはアクティビティに表示します。
うまくいっていますが、別のページの HTML ソース コードを表示したいのですが、方法がわかりません。別のページにアクセスするために別の httpclient または httpost を作成するたびに、既にログインしている場合でも、ログイン ページのソース コードが表示されます。
これはメインコードです:
public class TestingActivity extends Activity implements OnClickListener {
String uname, pass, pic;
EditText txtUname, txtPass;
Button login;
TextView result, tview2, tview3;
String nameStartLine = " <td style=\"font:10px verdana; color:#312e25; text-align:right;\">Name:</td>";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
login=(Button)findViewById(R.id.button1);
result=(TextView)findViewById(R.id.textView1);
tview2=(TextView)findViewById(R.id.textView2);
tview3=(TextView)findViewById(R.id.textView3);
txtUname=(EditText)findViewById(R.id.editText1);
txtPass=(EditText)findViewById(R.id.editText2);
login.setOnClickListener(this);
}
public void postLoginData() {
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("http://students.usls.edu.ph/login.cfm");
try {
String username = txtUname.getText().toString();
String password = txtPass.getText().toString();
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
nameValuePairs.add(new BasicNameValuePair("username",username));
nameValuePairs.add(new BasicNameValuePair("password",password));
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
HttpResponse response = httpclient.execute(httppost);
String str = inputStreamToString(response.getEntity().getContent()).toString();
result.setText(str);
Intent intent = new Intent(TestingActivity.this,panel_1.class);
intent.putExtra("result",result.getText());
pic = "http://teachers.usls.edu.ph/student_pics/" + txtUname.getText() + ".jpg";
intent.putExtra("pic",pic);
startActivity(intent);
}
catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
private StringBuilder inputStreamToString(InputStream is) {
String line = "";
StringBuilder total = new StringBuilder();
// Wrap a BufferedReader around the InputStream
BufferedReader rd = new BufferedReader(new InputStreamReader(is));
// Read response until the end
try{
while ((line = rd.readLine()) != null) {
if (line.equals(nameStartLine)) {
line = rd.readLine();
StringTokenizer st = new StringTokenizer(line, ">< ");
String marker = st.nextToken();
while(st.hasMoreTokens()) {
if(marker.equals("strong")) {
marker = st.nextToken();
while(!(marker.equals("/strong"))) {
total.append(marker + " ");
marker = st.nextToken();
}
}
marker = st.nextToken();
}
}
}
}
catch (IOException e) {
e.printStackTrace();
}
// Return full string
return total;
}
public void onClick(View view) {
if(view == login){ postLoginData(); }
}
}
2 つ目のアクティビティは次のとおりです。
public class panel_1 extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main2);
TextView result = (TextView)findViewById(R.id.txtresult);
result.setText(""+getIntent().getExtras().getString("result"));
//set position
WebView myWebView = (WebView) findViewById(R.id.webView1);
myWebView.loadUrl(getIntent().getExtras().getString("pic"));
}
}
ご覧のとおり、プログラムはパラメータを に渡しましたhttp://students.usls.edu.ph/login.cfm
。ログインに成功すると、メイン ページの HTML ソース コードが取得され、学生の名前と写真が表示されます。では、プログラムをこのリンクにリダイレクトして HTML ソース コードを表示し、そこから重要なデータを取得するにはどうすればよいでしょうか? 再度使用してみhttpclient
ましたが、ログインページの HTML ソースコードが表示されたり、http://students.usls.edu.ph/login.cfm
既にログインしているのに表示されたりします。