如何使用Android应用程序将数据发送到网站

时间:2013-05-01 09:03:26

标签: android http post send

我正在尝试将一些数据发送到我的网站。单击该按钮时,需要将数据发送到网站

但是当我运行程序时出现了一些错误

当我点击按钮时,此消息显示“不幸的是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;

?>

我也获准在我的应用程序中使用互联网。

4 个答案:

答案 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)编写的代码,在服务器上接收该数据的后半部分

  • 服务器需要接收数据
  • 在服务器端实施功能
  • 只要android会推送网址+数据,就会调用[网络服务]功能
  • 获得数据后,根据需要对其进行操作