0

有没有办法通过 ajax 将 android 本地 HTML 表单发送到远程 php 服务器?(本地意味着文件在我的设备中) 我的情况是:在我的应用程序中,我的 android 设备中有一个 html 文件并加载到 webview 中,我的设备中也有 javascript 文件。我想要做的是将 html 表单数据发送到远程服务器。在我目前的情况下,它没有发送任何数据,我检查了 javascript 和 php 并且代码很好,并且它可以在应用程序的 iOS 版本上运行。我尝试了其他解决方法,我观察到的是,当我使用本地文件在 webview 中加载 html 文件时(例如 webview.loadUrl("file://"+ Environment.getExternalStorageDirectory()+"/android_asset/list. html"),android 正在本地寻找所有其他相关文件(例如 formsprocessor.php),尽管在 javascript/ajax 中,其函数中的所有必要参数都已正确提供。我遇到的错误是: FileNotFound: content://packagename.com/formsprocessor.php & Unknown chronium error: -6。有没有办法或最好的方法是什么?

谢谢,克林特。

4

1 回答 1

0

这解决了我的问题:使用了 javascripthandler,在我的 javascript 中,我从处理程序调用函数。所以基本上,android使用httppost处理数据上传到服务器。这是代码;

处理程序:

final class IJavascriptHandler{
     IJavascriptHandler(){}

     public void sendJSONToAndroid(String text){
            if(!Config.canConnect((ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE), home) && dialogNoConnFlag == false)                 {
                    dialogNoConnFlag = true;
                    Config.notificationMsg(Config.ERRORNOCONN,home, Config.TITLE1 + " " + Config.TITLE6);
                    return;
                }
                try {
                    Log.v("SendToServer","Send JSON to Server");
                    String url = "";
                    JSONObject json_data = new JSONObject(text);
                    JSONArray names= json_data.names();
                    JSONArray values = json_data.toJSONArray(names);
                    List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
                    for(int i = 0 ; i < values.length(); i++){
                        Log.v("Good",names.getString(i).toString());
                        if(names.getString(i).equals("url")) {
                            url = json_data.getString(names.getString(i)).toString();
                        }
                        nameValuePairs.add(new BasicNameValuePair( names.getString(i).toString(),  json_data.getString(names.getString(i)).toString()));

                    }
                    Config.uploadToServer(nameValuePairs, url);
                } 
                catch (JSONException e) 
                {
                     Config.notificationMsg(Config.ERRORMSG + e.getMessage(), (Activity) home, Config.TITLE1 + " " + Config.TITLE6);
                }
           }

    }

httppost:

    public static String uploadToServer(List<NameValuePair> nameValuePairs, String url){
    if(Session.isordinaryHost)
    {
        httpclient = new DefaultHttpClient();
    }
    else
    {
        httpclient = new MyHttpClient().getNewHttpClient();
        ((AbstractHttpClient) httpclient).getCredentialsProvider().setCredentials(
              new AuthScope(Session.siteIp, 443), 
              new UsernamePasswordCredentials(Session.siteUsername, Session.sitePassword));
    }
    httppost = new HttpPost(url);  
    try 
    {
        httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));

        // Execute HTTP Post Request
        HttpResponse response = httpclient.execute(httppost);
        HttpEntity entity = response.getEntity();  
        EntityUtils.toString(entity);  
    }
    catch (ClientProtocolException e) 
    {
         return e.getMessage();
    } 
    catch (IOException e) 
    {
         return e.getMessage();
    } 
    return null;
}

的JavaScript:

function CheckCompleteRecords() {
DB.transaction(function(tx) {
    tx.executeSql(SelectCompleteForUploadStatement, [], function(tx, result) { 
    Dataset = result.rows;
        for (var i = 0, item = null; i < Dataset.length; i++) {
            item = Dataset.item(i);
    var a = createJSON(item['FormName'],item['UserID'],item['Image1'],item['Image2'],item['Image3'],item['Image4'],item['Image5'],item['Field1'],item['Field2'],item['Field3'],item['Field4'],item['Field5'],item['Field6'],item['Field7'],item['Field8'],item['Field9'],item['Field10'],item['Field11'],item['Field12'],item['Field13'],item['Field14'],item['Field15'],item['Field16'],item['Field17'],item['Field18'],item['Field19'],item['Field20'],item['Field21'],item['Field22'],item['Field23'],item['Field24'],item['Field25'],item['Field26'],item['Field27'],item['Field28'],item['Field29'],item['Field30'],item['Field31'],item['Field32'],item['Field33'],item['Field34'],item['Field35'],item['Field36'],item['Field37'],item['Field38'],item['Field39'],item['Field40'],item['Field41'],item['Field42'],item['Field43'],item['Field44'],item['Field45'],item['Field46'],item['Field47'],item['Field48'],item['Field49'],item['Field50'],item['Field51'],item['Field52'],item['Field53'],item['Field54'],item['Field55'],item['Field56'],item['Field57'],item['Field58'],item['Field59'],item['Field60'],item['Field61'],item['Field62'],item['Field63'],item['Field64'],item['Field65'],item['Field66'],item['Field67'],item['Field68'],item['Field69'],item['Field70'],item['Field71'],item['Field72'],item['Field73'],item['Field74'],item['Field75'],item['Field76'],item['Field77'],item['Field78'],item['Field79'],item['Field80'],item['Field81'],item['Field82'],item['Field83'],item['Field84'],item['Field85'],item['Field86'],item['Field87'],item['Field88'],item['Field89'],item['Field90'],item['Field91'],item['Field92'],item['Field93'],item['Field94'],item['Field95'],item['Field96'],item['Field97'],item['Field98'],item['Field99'],item['Field100'],item['CurrentDateTime'],item['Geolocation'],item['BarCode']);                             
    window.cpjs.sendJSONToAndroid(a);

            showStuff('SendServerBtn');
            window.location = "senttoserver://app_action";
    }
    });
});
}   
于 2013-04-12T01:59:09.303 回答