我不是为什么我的输入过程在服务器端4次?

时间:2013-12-13 17:32:36

标签: javascript android json node.js

我想将Android与node.js服务器进行通信。当我从andorid给出输入时,它以服务器端的json格式存储输入。但它显示4次,处理时间也很慢。有人可以告诉我原因吗?并在命令提示符下输出打印而不是我的应用程序。

以下是我的Android代码。

public static String POST(String url, Person person){
    InputStream inputStream = null;
    String result = "";
    try {

        // 1. create HttpClient
        HttpClient httpclient = new DefaultHttpClient();

        // 2. make POST request to the given URL
        HttpPost httpPost = new HttpPost(url);

        String json = "";


        // 3. build jsonObject
        JSONObject jsonObject = new JSONObject();
        jsonObject.accumulate("number", person.getName());

        // 4. convert JSONObject to JSON to String
        json = jsonObject.toString();


        // ** Alternative way to convert Person object to JSON string usin Jackson Lib 
        // ObjectMapper mapper = new ObjectMapper();
        // json = mapper.writeValueAsString(person); 

        // 5. set json to StringEntity
        StringEntity se = new StringEntity(json);

        // 6. set httpPost Entity
        httpPost.setEntity(se);

        // 7. Set some headers to inform server about the type of the content   
        httpPost.setHeader("Accept", "application/json");
        httpPost.setHeader("Content-type", "application/json");

        // 8. Execute POST request to the given URL
        HttpResponse httpResponse = httpclient.execute(httpPost);

        // 9. receive response as inputStream
        inputStream = httpResponse.getEntity().getContent();


        // 10. convert inputstream to string
        if(inputStream != null)
            result = convertInputStreamToString(inputStream);
        else
            result = "Did not work!";

    } catch (Exception e) {
        Log.d("InputStream", e.getLocalizedMessage());
    }

    // 11. return result
    return result;
}

 @Override
    public void onClick(View view) {

        switch(view.getId()){
            case R.id.btnPost:
                if(!validate())
                    Toast.makeText(getBaseContext(), "Enter some data!", Toast.LENGTH_LONG).show();
                // call AsynTask to perform network operation on separate thread
                //http://hmkcode.appspot.com/jsonservlet
                new HttpAsyncTask().execute("http://10.0.2.2:8080");
            break;
        }

    }

public boolean isConnected(){
    ConnectivityManager connMgr = (ConnectivityManager) getSystemService(Activity.CONNECTIVITY_SERVICE);
        NetworkInfo networkInfo = connMgr.getActiveNetworkInfo();
        if (networkInfo != null && networkInfo.isConnected()) 
            return true;
        else
            return false;   
}

private class HttpAsyncTask extends AsyncTask<String, Void, String> {
    @Override
    protected String doInBackground(String... urls) {

        person = new Person();
        person.setName(etNum.getText().toString());

        return POST(urls[0],person);
    }
    // onPostExecute displays the results of the AsyncTask.
    @Override
    protected void onPostExecute(String result) {
        Toast.makeText(getBaseContext(), "Wait! Input is Processing!", Toast.LENGTH_LONG).show();
   }
}


private boolean validate(){
    if(etNum.getText().toString().trim().equals(""))
        return false;

    else
        return true;    
}
private static String convertInputStreamToString(InputStream inputStream) throws IOException{
    BufferedReader bufferedReader = new BufferedReader( new InputStreamReader(inputStream));
    String line = "";
    String result = "";
    while((line = bufferedReader.readLine()) != null)
        result += line;

    inputStream.close();
    return result;

}

以下是Node.js代码:

var http = require('http');
// Configure our HTTP server to respond with Hello World to all requests.
var server = http.createServer(function (request, response) {
console.log("Processing Input");


if ( request.method === 'POST' ) {

    // the body of the POST is JSON payload.
    request.pipe(process.stdout);   

    var data = '';
    request.on('data', function(chunk) {
        data += chunk;
    });

    request.on('end', function() {
        try {
            data = JSON.parse(data);


        } catch (e) {
            console.log(e);
        }
    });
}

});

// Listen on port 8000, IP defaults to 127.0.0.1
server.listen(8080);

// Put a friendly message on the terminal
console.log("Server running at http://127.0.0.1:8080/");

0 个答案:

没有答案