将 $_POST 数据发送到 Android Webview

Posted

技术标签:

【中文标题】将 $_POST 数据发送到 Android Webview【英文标题】:Send $_POST data to Android Webview 【发布时间】:2012-12-06 09:28:51 【问题描述】:

所以我有这个位于 WebView 中的 android 应用程序,它应该将数据传递到服务器(托管站点),不幸的是我做不到,所以我需要你的帮助来解决这个问题。

我从这个网站获得了大部分代码,所以你可能看起来很熟悉。

所以我有了这个 html 文件,它启动了将数据发送到服务器的功能。

watch_video.html

    var v_id = getUrlVars()["v_id"];

    $.ajax(

        url: "http://mysite.com/fbtest.php?json_callback=?",
        dataType: "jsonp text",       
        //GET method is used
        type: "POST",

        //pass the data         
        data: 'v_id=' + v_id,

        //Do not cache the page
        cache: false,

        //Cross Domain
        crossDomain: true,

        //success
        success: function (html)     
            alert(html);         
         

因此,在使用跨域的服务器(托管站点)中的 PHP 文件中,代码如下:

<?php
include("includes/db.php");
header('content-type: application/json; charset=utf-8');
header('Access-Control-Allow-Origin: *');

$v_id = ($_POST['v_id']) ?$_POST['v_id'] : $_GET['v_id'];
$dwatch=date("Y-m-d");
$twatch=date("H:i:s");

$query="insert into watched_videos (fb_id,vid,date_watched,time_watched) values('12345','".$v_id."','".$dwatch."','".$twatch."')";
        $row = mysql_query($query);
?>

我使用 XAMPP 在本地对此进行了测试,它可以将数据插入数据库。

当我在 Android 中安装它并执行相同的功能时,它不起作用。

这是我的 MainActivity.java 代码:

package namename.name;

import android.os.Bundle;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.view.KeyEvent;
import android.view.Menu;
import android.webkit.WebSettings.PluginState;
import android.webkit.WebView;


public class MainActivity extends Activity 

    @SuppressLint("SetjavascriptEnabled")
    @Override
    protected void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        WebView mWebView = null;
        mWebView = (WebView) findViewById(R.id.webtest);
        mWebView.getSettings().setPluginState(PluginState.ON);
        mWebView.getSettings().setJavaScriptEnabled(true);
        mWebView.loadUrl("file:///android_asset/www/indexbackup.html");
    


    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) 
        WebView mWebView = null;
        mWebView = (WebView) findViewById(R.id.webtest);
        if(event.getAction() == KeyEvent.ACTION_DOWN)
            switch(keyCode)
            
            case KeyEvent.KEYCODE_BACK:
                if(mWebView.canGoBack() == true)
                    mWebView.goBack();
                else
                    finish();
                
                return true;
            

        
        return super.onKeyDown(keyCode, event);
    

    @Override
    public boolean onCreateOptionsMenu(Menu menu) 
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    


所以回到我在使用 JSONP 在 WebView 中启动该函数之前所说的内容,它不起作用。

我想知道我是否有一些东西要放在我的 android 文件中。

如果有人帮助我,我会很高兴。

提前致谢。

【问题讨论】:

请不要编写直接将 post 或 get 变量放入数据库的代码。你应该在你的 PHP 中使用准备好的语句。 【参考方案1】:

问题出在这一行

mWebView.loadUrl("file:///android_asset/www/indexbackup.html");

你必须像浏览器一样提供正确的文件路径

mWebView.loadUrl("http://yoursite/android_asset/www/indexbackup.html");

【讨论】:

我不知道,但 html 文件位于 android 应用程序中。因此,当我安装应用程序时,文件 indexbackup.html 也安装在 android 设备中。我应该将 indexbackup.html 与 .php 文件一起放在托管站点中吗? 如果 html 文件不进行服务器调用,那么我建议将其放入您的 android 应用程序中,如果它进行服务器调用,则将其放入您的托管服务器中。 Thaaaanks!我从没想过把它放在托管网站上我还用我在网站上找到的一些代码修改了我的 android 文件,如果没有你的回答,我会一直卡到现在。我欠你一个人。谢谢。 :)

以上是关于将 $_POST 数据发送到 Android Webview的主要内容,如果未能解决你的问题,请参考以下文章

使用 post 方法将数据从 java android 发送到网络服务器

使用 HttpClient 将带有 post 方法的 utf8 内容发送到 android 中的服务器

如何将多部分/表单数据从 android 发送到 Web 服务器?

如何使用异步http post从android studio发送数据到xampp并在真实设备中运行?

如何在 jmeter 中发送 $_POST 数据?

android如何将int和double作为namevaluepair作为http post发送