2016-11-16 8 views
0

В My.htm я отправляю массив var mytemp на сервер, я надеюсь получить массив var на стороне сервера.Как получить массив на стороне сервера с помощью NanoHTTPD в Android, когда я отправляю массив var на стороне клиента?

Я получаю строку D 1, D, 2, Tom'Dog, если я использую следующий код, как я могу получить массив на стороне сервера? Благодаря!

BTW, я надеюсь сделать полный пост, а не ajax, поэтому я думаю, что $ .ajax() не подходит.

My.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; 
    } 

ответ

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); вы можете разобрать, что данные и сделать массив из него.

+0

Спасибо! Не могли бы вы дать мне более подробный код? – HelloCW

+0

@HelloCW, на какой части вам нужен больше кода? Подумайте, что я разработчик Android, и я могу помочь вам, пока вы спрашиваете в части Android. –

+0

final JSONObject json = new JSONObject (files.get ("postData")) cause error – HelloCW