最新の Java Eclipse ソフトウェアを使用していますが、この HttpPost コードを実行するとエミュレータがクラッシュします。ラップトップにuniserverをインストールしたので、それをサーバーとして使用しています。
このコードは、前のクラスから編集テキスト データを呼び出し、HttpPost 要求を使用して、このデータをオンライン フォームのそれぞれのフィールドに投稿することになっています。
編集するテキストデータは「From」「To」「Message」の3項目です。また、サーバー上で作成したフォームにも、データを入力するための同じフィールドがあります。(" http://19x.xx.xx.xxx/androidp2p/testform.php ") 19x.xx.xx.xxx は私の (localhost) IP アドレスです。
前のクラスからそのデータを正しく取得しています。私のコードは、オンラインで見つけた HttpPost の例に似ていますが、なぜクラッシュするのかわかりません。
何か支援が得られるかどうかを確認しようとした HttpPost メソッドを添付しました。よろしくお願いします。
方法 1:
String myBreadu, myBreadr, myBreadm;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
Bundle myBasket = getIntent().getExtras();
myBreadu = myBasket.getString("keyfrom");
myBreadr = myBasket.getString("keyto");
myBreadm = myBasket.getString("keymsg");
// Create a new HttpClient and Post Header
HttpClient client = new DefaultHttpClient();
String postURL = ("http://19x.xx.xx.xxx/androidp2p/testform.php");
HttpPost post = new HttpPost(postURL);
try {
// Add the data
List<NameValuePair> pairs = new ArrayList<NameValuePair>(3);
pairs.add(new BasicNameValuePair("keysendu", myBreadu));
pairs.add(new BasicNameValuePair("keysendr", myBreadr));
pairs.add(new BasicNameValuePair("keysendm", myBreadm));
UrlEncodedFormEntity uefe = new UrlEncodedFormEntity(pairs);
post.setEntity(uefe);
// Execute the HTTP Post Request
HttpResponse response = client.execute(post);
// Convert the response into a String
HttpEntity resEntity = response.getEntity();
if (resEntity != null) {
Log.i("RESPONSE", EntityUtils.toString(resEntity));
}
} catch (UnsupportedEncodingException uee) {
uee.printStackTrace();
} catch (ClientProtocolException cpe) {
cpe.printStackTrace();
} catch (IOException ioe) {
ioe.printStackTrace();
}
}
方法 2:
String myBreadu, myBreadr, myBreadm;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
Bundle myBasket = getIntent().getExtras();
myBreadu = myBasket.getString("keyfrom");
myBreadr = myBasket.getString("keyto");
myBreadm = myBasket.getString("keymsg");
String result = null;
// Create a new HttpClient and Post Header
HttpClient client = new DefaultHttpClient();
String postURL = ("http://186.45.107.129/androidp2p/testform.php");
HttpPost post = new HttpPost(postURL);
try {
// Add the data
List<NameValuePair> pairs = new ArrayList<NameValuePair>(3);
pairs.add(new BasicNameValuePair("keysendu", myBreadu));
pairs.add(new BasicNameValuePair("keysendr", myBreadr));
pairs.add(new BasicNameValuePair("keysendm", myBreadm));
UrlEncodedFormEntity uefe = new UrlEncodedFormEntity(pairs);
post.setEntity(uefe);
// Execute the HTTP Post Request
HttpResponse response = client.execute(post);
// Convert the response into a String
HttpEntity resEntity = response.getEntity();
BufferedReader rd = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
String l = "";
StringBuilder sb = new StringBuilder();
while ((l = rd.readLine()) != null) {
sb.append(l + "\n");
}
rd.close();
String result = sb.toString(); // this line gives an error "Duplicate local variable result"
} catch (UnsupportedEncodingException uee) {
uee.printStackTrace();
} catch (ClientProtocolException cpe) {
cpe.printStackTrace();
} catch (IOException ioe) {
ioe.printStackTrace();
}
}
これはtestform.PHPです
テストフォーム
差出人:宛先:
メッセージ:
もう1つ追加してもらえますか?データをフォームに直接送信する必要があるのか 、それとも私が持っているこの他のPHPページに送信する必要があるのか わかりません..
ちなみに、HttpPost を実行しようとするとログに記録されるエラーは次のとおりです。
FATAL EXCEPTION: main
03-07 11:36:23.226: E/AndroidRuntime(1490): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.project.keegan/com.project.keegan.SendPostMethod}: android.os.NetworkOnMainThreadException
03-07 11:36:23.226: E/AndroidRuntime(1490): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2059)
03-07 11:36:23.226: E/AndroidRuntime(1490): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084)
03-07 11:36:23.226: E/AndroidRuntime(1490): at android.app.ActivityThread.access$600(ActivityThread.java:130)
これがあまりにも多くの情報である場合は申し訳ありません。ありがとう。