我正在尝试将一些数据发送到我的网站。单击该按钮时,需要将数据发送到网站
但是当我运行程序时出现了一些错误
当我点击按钮时,此消息显示“不幸的是app已停止”,然后退出我的应用程序。
public class testInput extends Activity {
Button Setbutton;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.test_input_page);
Setbutton=(Button)findViewById(R.id.setbtn);
Setbutton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
testInput ti=new testInput();
//Create the intent
ti.postData("Sent Data");
});
}
public void postData(String toPost) {
// Create a new HttpClient and Post Header
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("http://mysite.com/index.php");
//This is the data to send
String MyName = toPost; //any data to send
try {
// Add your data
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(1);
nameValuePairs.add(new BasicNameValuePair("action", MyName));
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
// Execute HTTP Post Request
ResponseHandler<String> responseHandler = new BasicResponseHandler();
String response = httpclient.execute(httppost, responseHandler);
//This is the response from a php application
String reverseString = response;
Toast.makeText(this, "response" + reverseString, Toast.LENGTH_LONG).show();
} catch (ClientProtocolException e) {
Toast.makeText(this, "CPE response " + e.toString(), Toast.LENGTH_LONG).show();
// TODO Auto-generated catch block
} catch (IOException e) {
Toast.makeText(this, "IOE response " + e.toString(), Toast.LENGTH_LONG).show();
// TODO Auto-generated catch block
}
}//end postData()
这是我的PHP代码。
<?php
//code to reverse the string
$reversed = strrev($_POST["action"]);
echo $reversed;
?>
我也获准在我的应用程序中使用互联网。
答案 0 :(得分:3)
从Android 3.x开始,您无法在主线程中执行网络操作。您需要使用AsyncTask或单独的线程来调用postData方法。
http://developer.android.com/reference/android/os/NetworkOnMainThreadException.html
答案 1 :(得分:2)
使用以下代码
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("http://yoursite.com/index.php");
String MyName = toPost;
try
{
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(1);
nameValuePairs.add(new BasicNameValuePair("action", MyName));
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
HttpResponse response = httpclient.execute(httppost);
InputStream is = response.getEntity().getContent();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
result = br.readLine();
//This is the response from a php application
String reverseString = result;
Toast.makeText(this, "result" + reverseString, Toast.LENGTH_LONG).show();
}
catch(Exception e)
{
Toast.makeText(this, ""+e, Toast.LENGTH_LONG).show();
}
答案 2 :(得分:1)
i hope this help u alloott
package com.example.test;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
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.BasicResponseHandler;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import android.os.AsyncTask;
import android.os.Bundle;
import android.app.Activity;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button but=(Button)findViewById(R.id.button1);
but.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
postData();
}
});
}
@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;
}
public void postData() {
// Create a new HttpClient and Post Header
class ss extends AsyncTask<Void, Void, String>
{
@Override
protected String doInBackground(Void... params) {
// TODO Auto-generated method stub
HttpClient httpclient = new DefaultHttpClient();
String result = null;
HttpPost httppost = new HttpPost("http://www.techdoo.com/test.php");
try
{
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(1);
nameValuePairs.add(new BasicNameValuePair("action", "fadeel"));
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
HttpResponse response = httpclient.execute(httppost);
InputStream is = response.getEntity().getContent();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
result = br.readLine();
//This is the response from a php application
String reverseString = result;
EditText edit1=(EditText)findViewById(R.id.editText1);
edit1.setText(result);
// Toast.makeText(this, "result" + reverseString, Toast.LENGTH_LONG).show();
}
catch(Exception e)
{
//Toast.makeText(this, ""+e, Toast.LENGTH_LONG).show();
}
return result;
}
@Override
protected void onPostExecute(String result) {
// TODO Auto-generated method stub
if(result==null)
{
Toast.makeText(getApplicationContext(), "not ok", Toast.LENGTH_LONG).show();
}
else
Toast.makeText(getApplicationContext(), result, Toast.LENGTH_LONG).show();
super.onPostExecute(result);
}
}
ss s=new ss();
s.execute(null,null,null);
}
}
答案 3 :(得分:0)
这是一段代码片段,希望它能为您提供帮助。
1)一个携带http get服务的函数
private String SendDataFromAndroidDevice() {
String result = "";
try {
HttpClient httpclient = new DefaultHttpClient();
HttpGet getMethod = new HttpGet("your url + data appended");
BufferedReader in = null;
BasicHttpResponse httpResponse = (BasicHttpResponse) httpclient
.execute(getMethod);
in = new BufferedReader(new InputStreamReader(httpResponse
.getEntity().getContent()));
StringBuffer sb = new StringBuffer("");
String line = "";
while ((line = in.readLine()) != null) {
sb.append(line);
}
in.close();
result = sb.toString();
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
2)扩展AsyncTask的类
private class HTTPdemo extends
AsyncTask<String, Void, String> {
@Override
protected void onPreExecute() {}
@Override
protected String doInBackground(String... params) {
String result = SendDataFromAndroidDevice();
return result;
}
@Override
protected void onProgressUpdate(Void... values) {}
@Override
protected void onPostExecute(String result) {
if (result != null && !result.equals("")) {
try {
JSONObject resObject = new JSONObject(result);
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
3)在onCreate方法中
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView("your layout");
if ("check here where network/internet is avaliable") {
new HTTPdemo().execute("");
}
}
我提供的代码段以下列方式工作,
1) Android设备将URL +数据发送到服务器
2)服务器[说使用PHP ]接收数据并发出确认
现在提供应该在客户端(Android)编写的代码,在服务器上接收该数据的后半部分