将$ _POST数据发送到Android Webview

时间:2012-12-19 04:19:26

标签: php android ajax json jsonp

所以我有这个Android应用程序在WebView中应该将数据传递给服务器(托管站点),遗憾的是我不能这样做所以我需要你的帮助才能解决这个问题。

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

所以我有这个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文件中。

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

提前致谢。

1 个答案:

答案 0 :(得分:1)

问题在于这一行

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

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

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