2016-04-05 118 views
-1

我一直在尝试从android发送数据到本地服务器。我在Logcat上获得了成功发送数据的响应,但我无法在网页上显示它。发送数据从android到服务器(本地主机)

Android的代码是:

package rk.android.test.test; 

import android.os.AsyncTask; 
import android.os.Bundle; 
import android.support.v7.app.AppCompatActivity; 
import android.util.Log; 
import android.view.View; 
import android.widget.Button; 

import java.io.IOException; 
import java.util.ArrayList; 
import java.util.List; 

import cz.msebera.android.httpclient.HttpEntity; 
import cz.msebera.android.httpclient.HttpResponse; 
import cz.msebera.android.httpclient.NameValuePair; 
import cz.msebera.android.httpclient.client.HttpClient; 
import cz.msebera.android.httpclient.client.entity.UrlEncodedFormEntity; 
import cz.msebera.android.httpclient.client.methods.HttpPost; 
import cz.msebera.android.httpclient.impl.client.DefaultHttpClient; 
import cz.msebera.android.httpclient.message.BasicNameValuePair; 
import cz.msebera.android.httpclient.util.EntityUtils; 


public class MainActivity extends AppCompatActivity { 
Button button; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     button = (Button)findViewById(R.id.send); 
     button.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
        new DataAsyncTask().execute(); 
      } 
     }); 
    } 

    public class DataAsyncTask extends AsyncTask<String, String, String> 
    { 
     protected void onPreExecute() 
     { 
      super.onPreExecute(); 
     } 

     @Override 
     protected String doInBackground(String... params) 
     { 
      try { 
       String postUrl = "http://192.168.137.1/receiver/receiver.php"; 
       HttpClient httpClient = new DefaultHttpClient(); 

// post header 
       HttpPost httpPost = new HttpPost(postUrl); 

// add your data 
       List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2); 
       nameValuePairs.add(new BasicNameValuePair("action", "Mohan")); 
       httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 

// execute HTTP post request 
       HttpResponse response = httpClient.execute(httpPost); 
       HttpEntity resEntity = response.getEntity(); 

       if (resEntity != null) { 

        String responseStr = EntityUtils.toString(resEntity).trim(); 
        Log.v("OP", "Response: " + responseStr); 

        // you can add an if statement here and do oth 

       } 
      }catch (Exception e) 
      { 
       e.printStackTrace(); 
      } 
      return null; 
     } 

    } 
} 

PHP代码为:

<?php 
$reversed = strrev($_POST["action"]); 

echo $reversed; 
?> 

logcat的回应是:

04-06 02:36:55.789 17879-17959/rk.android.test.test V/OP: Response: nahoM 

问题是我得到加载一个空白页receiver.php文件!

回答

0

如果这是

echo strrev($_POST["action"]); 

那么当然它会导航到它时,仅打印空白页文件的唯一内容 - 因为$_POST['action']将取消设置。

如果你想这显示的东西,改变POSTREQUEST代替,然后导航到它是这样的:

http://server:port/page.php?action=esreveRoTgnirtS 
0

receiver.php脚本在POST体通过颠倒“action”参数进行响应。基于HttpClient的代码提供了此参数值。

当您尝试在网页中加载此URL时,请确保您在POST正文中传递了一些参数值。如果你没有,$reversed将是一个空字符串,你会看到一个空白页。

为了通过POST在Web浏览器来传递参数,你需要或者使用XMLHttpRequest,或<form>元素,这意味着你将需要一个额外的网页,将有一个<form action=".../receiver.php">和适当<input name="action">元素。

如果您不使用_POST而使用_GET_REQUEST(以处理这两种方法),则可避免使用此功能。然后你可以通过URL的查询部分传递“action”参数:“..../receiver.php?action = Mohan”。

相关问题