今回はいきなりeclipseを使って、HTTPリクエストを送信してレスポンスを表⽰する、というアプリの開発を行うことになりました。
時間もなく拾ってきたサンプルを動かして理解しようと試みたのですが、
課題の内容をどう作るのか、「 解決できないかフィールドではありません」というエラーをどう解決させられるのか理解できず困っております。
R.javaに記載するなど、調べて見つけた対策を行ったのですがエラーが残り、実行できない状態です。
コードを書き込ませていただきます。
package com.example.test;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.ArrayList;
import java.util.List;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.NameValuePair;
import org.apache.http.client.ResponseHandler;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
public class HttptestActivity extends Activity implements OnClickListener {
private Button btn = null;
private TextView tv = null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
btn = (Button)findViewById(R.id.btn1);
tv = (TextView)findViewById(R.id.tv1);
btn.setOnClickListener(this);
}
@Override
public void onClick(View v) {
// ボタン押下時
if( v == btn )
{
exec_post();
}
}
// POST通信を実行(AsyncTaskによる非同期処理を使わないバージョン)
private void exec_post() {
Log.d("posttest", "postします");
String ret = "";
// URL
URI url = null;
try {
url = new URI( "http://10.0.2.2/android_post_test.php" );
Log.d("posttest", "URLはOK");
} catch (URISyntaxException e) {
e.printStackTrace();
ret = e.toString();
}
// POSTパラメータ付きでPOSTリクエストを構築
HttpPost request = new HttpPost( url );
List<NameValuePair> post_params = new ArrayList<NameValuePair>();
post_params.add(new BasicNameValuePair("post_1", "ユーザID"));
post_params.add(new BasicNameValuePair("post_2", "パスワード"));
try {
// 送信パラメータのエンコードを指定
request.setEntity(new UrlEncodedFormEntity(post_params, "UTF-8"));
} catch (UnsupportedEncodingException e1) {
e1.printStackTrace();
}
// POSTリクエストを実行
DefaultHttpClient httpClient = new DefaultHttpClient();
try {
Log.d("posttest", "POST開始");
ret = httpClient.execute(request, new ResponseHandler<String>() {
@Override
public String handleResponse(HttpResponse response) throws IOException
{
Log.d(
"posttest",
"レスポンスコード:" + response.getStatusLine().getStatusCode()
);
// 正常に受信できた場合は200
switch (response.getStatusLine().getStatusCode()) {
case HttpStatus.SC_OK:
Log.d("posttest", "レスポンス取得に成功");
// レスポンスデータをエンコード済みの文字列として取得する
return EntityUtils.toString(response.getEntity(), "UTF-8");
case HttpStatus.SC_NOT_FOUND:
Log.d("posttest", "データが存在しない");
return null;
default:
Log.d("posttest", "通信エラー");
return null;
}
}
});
} catch (IOException e) {
Log.d("posttest", "通信に失敗:" + e.toString());
} finally {
// shutdownすると通信できない
httpClient.getConnectionManager().shutdown();
}
// 受信結果をUIに表示
tv.setText( ret );
}
}
ですが、どうかご指摘助言よろしくお願いいたします。