【问题标题】:How to retrieve the array in server side using NanoHTTPD in Android when I post a array var in client side?当我在客户端发布数组 var 时,如何在 Android 中使用 NanoHTTPD 检索服务器端的数组?
【发布时间】:2017-03-30 02:59:44
【问题描述】:

在 My.htm 中,我将数组 var mytemp 发布到服务器端,我希望在服务器端检索数组 var。

如果我使用以下代码,我只能得到一个字符串 D 1,D,2,Tom'Dog,我如何在服务器端检索数组?谢谢!

顺便说一句,我希望做一个完整的帖子,而不是ajax,所以我认为$.ajax() 不适合。

我的.htm

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>

    <script src="js/jquery1.10.2.min.js?isassets=1" type="text/javascript"></script>

    <script type="text/javascript">

     $(function () {
        document.querySelector('#myformID').addEventListener('submit', event => {
           if (!confirm('Do you want to delete selected images?')) {
              event.preventDefault();
           }
        });

        $("#myformID").submit( function(eventObj) {

         var mytemp=new Array();
          mytemp.push("D 1");
          mytemp.push("D,2");
          mytemp.push("Tome'Dog");


           $('<input />').attr('type', 'hidden')
              .attr('name', "myCw")
              .attr('value',mytemp)
             .appendTo('#myformID');
           return true;
        });

     });

    </script>


</head>

<body>
   <div id="container">
       <form action='' method='post' enctype='multipart/form-data' id="myformID">           
           <input type='file' name='myfilename' /> Please select a file
           <input type='submit'name='submit' value='Delete Selecetd Items' />
       </form>

    </div>

</body>
</html>

服务器端

public class HttpServer extends NanoHTTPD {

   private Context mContext;

   public HttpServer(Context myContext) throws IOException {
        super(PublicParFun.GetWebPort(myContext));
        this.mContext=myContext;
        start(NanoHTTPD.SOCKET_READ_TIMEOUT);
   }


    private Response POST(IHTTPSession session) {
         Utility.LogError("Handle Post");

        try {
            Map<String, String> files = new HashMap<String, String>();
            session.parseBody(files);


            Set<String> keys1 =session.getParms().keySet() ;
            for(String key: keys1){
                String name = key;
                String loaction =session.getParms().get(key);                
            }          

        } catch (Exception e) {
            Utility.LogError("This is an error "+e.getMessage() );
            System.out.println("i am error file upload post ");
            e.printStackTrace();
        }
        return newFixedLengthResponse(Response.Status.OK, NanoHTTPD.MIME_PLAINTEXT,"I'm Hello!");
    }




    @Override
    public Response serve(IHTTPSession session) {

        String uri = session.getUri();
        Method method = session.getMethod();

        MURLPar mURLPar=new  MURLPar(mContext);
        FileFolderHelper.SetMURLParValue(mURLPar,session);

        if (mURLPar.isassets.value!=null && mURLPar.isassets.value.equals("1")){
            return GetResponseInputByAssetsFile(uri);
        }


        if (Method.POST.equals(method)) {      
            return POST(session);
        }


        String s=FileFolderHelper.GetStringTemplate(mContext,mContext.getString(R.string.WebImageBase));
        return newFixedLengthResponse(s);
    }
}

致Erfan Mowlaei:谢谢!下面的代码可以吗?

客户端:

  var mytemp=new Array();
       mytemp.push("D 1");
       mytemp.push("D, 2");
       mytemp.push("D'3");


       $("#myformID").submit( function(eventObj) {
           $('<input />').attr('type', 'hidden')
              .attr('name', "myCw")
              .attr('value', JSON.stringify(mytemp))
             .appendTo('#myformID');
           return true;
      });

服务器端

 public ArrayList<String> jsonStringToArray(String jsonString) throws JSONException {

        ArrayList<String> stringArray = new ArrayList<String>();

        JSONArray jsonArray = new JSONArray(jsonString);

        for (int i = 0; i < jsonArray.length(); i++) {
            stringArray.add(jsonArray.getString(i));
        }

        return stringArray;
    }

【问题讨论】:

    标签: android nanohttpd


    【解决方案1】:

    我假设您得到的是 JsonObject 或者您应该发送 JsonObject 以便能够获取它并将其转换为服务器端的数组。如果以 JsonArray 形式发送数据,在 NanoServer 中可以这样获取:

    @Override
    public Response serve(IHTTPSession session) throws JSONException {
        //Log.e("Tag", "request received!");
        Map<String, String> files = new HashMap<String, String>();
        Method method = session.getMethod();
        if (Method.POST.equals(method) || Method.PUT.equals(method)) {
            try {
                session.parseBody(files);
            } catch (IOException ioe) {
                try {
                    return new Response(Response.Status.INTERNAL_ERROR, MIME_PLAINTEXT, "SERVER INTERNAL ERROR: IOException: " + ioe.getMessage());
                } catch (UnsupportedEncodingException e) {
                    e.printStackTrace();
                    Log.e("UnsupportedEncodingException", e.getMessage());
                }
            } catch (ResponseException re) {
                try {
                    return new Response(re.getStatus(), MIME_PLAINTEXT, re.getMessage());
                } catch (UnsupportedEncodingException e) {
                    e.printStackTrace();
                    Log.e("UnsupportedEncodingException", re.getMessage());
                }
            }
        }
    
        final JSONObject json = new JSONObject(files.get("postData"));
        //Log.e("MyData", json.toString());
        responseInterface.OnResponse(json); // my interface to pass data to other classes
        return newFixedLengthResponse("Success!");
    }
    

    然后稍后在responseInterface.OnResponse(JsonObject json); 中,您可以解析该数据并从中创建一个数组。

    【讨论】:

    • @HelloCW 您在哪一部分需要更多代码?考虑到我是android dev,只要您在android部分提出要求,我就可以为您提供帮助。
    • final JSONObject json = new JSONObject(files.get("postData")) 导致错误
    • 上面的代码用于获取来自 IoT 设备的 Json 参数,但我猜你的情况类似,如果你从客户端 sid 发送 JsonObject,请尝试查找如何使用 javaScript 以 Json 格式发布数据,您应该能够使用我提供的代码在服务器端获取它。
    • 谢谢!我已经搜索过“如何使用 javaScript 以 Json 格式发布数据”,但是如果没有 ajax,我无法得到正确的结果,你能写一个示例 html 代码在 Json 中发布数组数据吗?
    • 谢谢!我已经阅读了你的文档,我希望做一个完整的帖子,而不是 ajax,我需要在客户端发布一个数组,并在服务器端检索数组。我能怎么做?谢谢
    猜你喜欢
    • 1970-01-01
    • 2012-11-09
    • 2016-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-01
    相关资源
    最近更新 更多