Java 使用截击的android post请求

Java 使用截击的android post请求,java,android,node.js,rest,Java,Android,Node.js,Rest,我在android代码中使用了Volley、HttpClient和HttpUrlConnection,这些代码从sensor manager获取传感器指标。我需要通过POST请求将这些度量导出到nodejs服务器。每当传感器值发生变化时,我都需要一个post请求以异步方式转到http服务器 MainActivity.java package com.example.rpothuraju.gyrometrics; import android.app.Activity; import andro

我在android代码中使用了Volley、HttpClient和HttpUrlConnection,这些代码从sensor manager获取传感器指标。我需要通过POST请求将这些度量导出到nodejs服务器。每当传感器值发生变化时,我都需要一个post请求以异步方式转到http服务器

MainActivity.java

package com.example.rpothuraju.gyrometrics;

import android.app.Activity;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;

import com.android.volley.Request;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.StringRequest;

public class MainActivity extends Activity implements SensorEventListener{
TextView textView;
private SensorManager sensorManager;
//private Sensor sensor;

@Override
public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    textView = (TextView) findViewById(R.id.metrics);

    sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
    //sensor = sensorManager.getDefaultSensor(Sensor.TYPE_GYROSCOPE);


}

protected void onResume()
{
    super.onResume();
    sensorManager.registerListener(this, sensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD),SensorManager.SENSOR_DELAY_FASTEST);
}

protected void onStop()
{
    sensorManager.unregisterListener(this);
    super.onStop();
}

public void onAccuracyChanged(Sensor arg0, int arg1)
{
    //Do nothing.
}

public void onSensorChanged(SensorEvent event)
{
    if (event.accuracy == SensorManager.SENSOR_STATUS_UNRELIABLE)
    {
        return;
    }

    String url ="http://localhost:8080/?X=" + event.values[0] + "&&Y= " + event.values[1] + "&&Z=" + event.values[2];

    StringRequest stringRequest = new StringRequest(Request.Method.POST, url, new Response.Listener<String>() {
        @Override
        public void onResponse(String response) {
            Log.i("VOLLEY", response);
        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            Log.e("VOLLEY", error.toString());
        }
    });

    textView.setText("Orientation X (Roll) :"+ Float.toString(event.values[0]) +"\n"+
            "Orientation Y (Pitch) :"+ Float.toString(event.values[1]) +"\n"+
            "Orientation Z (Yaw) :"+ Float.toString(event.values[2]));

}
}
package com.example.rpoturaju.gyrometrics;
导入android.app.Activity;
导入android.hardware.Sensor;
导入android.hardware.SensorEvent;
导入android.hardware.SensorEventListener;
导入android.hardware.SensorManager;
导入android.os.Bundle;
导入android.util.Log;
导入android.widget.TextView;
导入com.android.volley.Request;
导入com.android.volley.Response;
导入com.android.volley.VolleyError;
导入com.android.volley.toolbox.StringRequest;
公共类MainActivity扩展活动实现SensorEventListener{
文本视图文本视图;
私人传感器管理器传感器管理器;
//专用传感器;
@凌驾
创建时的公共void(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView=(textView)findViewById(R.id.metrics);
sensorManager=(sensorManager)getSystemService(传感器服务);
//传感器=传感器管理器.getDefaultSensor(传感器.TYPE_陀螺仪);
}
受保护的void onResume()
{
super.onResume();
sensorManager.registerListener(这是sensorManager.getDefaultSensor(Sensor.TYPE\u MAGNETIC\u FIELD)、sensorManager.Sensor\u DELAY\u faster);
}
受保护的void onStop()
{
sensorManager.UnregistereListener(此);
super.onStop();
}
已更改准确性上的公共无效信息(传感器arg0、内部arg1)
{
//什么也不做。
}
传感器更改时的公共无效(传感器事件)
{
if(event.accurity==SensorManager.SENSOR\u状态\u不可靠)
{
返回;
}
字符串url=”http://localhost:8080/?X=“+event.values[0]+”&&Y=“+event.values[1]+”&&Z=“+event.values[2]”;
StringRequest StringRequest=new StringRequest(Request.Method.POST,url,new Response.Listener()){
@凌驾
公共void onResponse(字符串响应){
Log.i(“截击”,回应);
}
},new Response.ErrorListener(){
@凌驾
公共无效onErrorResponse(截击错误){
Log.e(“截击”,error.toString());
}
});
textView.setText(“方向X(滚动):”+Float.toString(事件值[0])+“\n”+
“方向Y(节距):“+Float.toString(事件值[1])+”\n”+
“方向Z(偏航):“+Float.toString(事件值[2]);
}
}
server.js

const util = require('util');
const http = require('http');

const port = 8080;

var server = http.createServer(function(request, response) {

response.setHeader('Access-Control-Allow-Origin', '*');
response.setHeader('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE');
response.setHeader('Access-Control-Allow-Headers', 'Content-Type');

var values = (request.url).replace(/[`~!@#$%^&*()_|+\-?;:'",.<>\{\}\[\]\\\/]/gi, '');
response.end(values);
console.log(values);
});

server.listen(port, (err) => {
if (err) {
    return console.log('something bad happened', err)
}

console.log(`server is listening on ${port}`)
});
const util=require('util');
const http=require('http');
常数端口=8080;
var server=http.createServer(函数(请求、响应){
response.setHeader('Access-Control-Allow-Origin','*');
setHeader('Access-Control-Allow-Methods','GET,PUT,POST,DELETE');
response.setHeader('Access-Control-Allow-Headers','Content-Type');
var values=(request.url).replace(/[`~!@$%^&*()|+\-?;:',.\{\}\[\]\\/]/gi',);
响应。结束(数值);
console.log(值);
});
服务器侦听(端口,(错误)=>{
如果(错误){
返回console.log('发生了不好的事情',错误)
}
log(`server正在侦听${port}`)
});

我无法看到来自服务器的任何响应…?

您创建了请求对象,但从未将其发送到服务器。
您应该为它设置一个请求队列

RequestQueue queue;
//inside the oncreate method 
queue = Volley.newRequestQueue(mCtx.getApplicationContext());
//and for sending request
String url ="http://localhost:8080/?X=" + event.values[0] + "&&Y= " + event.values[1] + "&&Z=" + event.values[2];

    StringRequest stringRequest = new StringRequest(Request.Method.POST, url, new Response.Listener<String>() {
        @Override
        public void onResponse(String response) {
            Log.i("VOLLEY", response);
        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            Log.e("VOLLEY", error.toString());
        }
    });
<br>
queue.add(stringRequest);
RequestQueue队列;
//在oncreate方法内部
queue=Volley.newRequestQueue(mCtx.getApplicationContext());
//和发送请求
字符串url=”http://localhost:8080/?X=“+event.values[0]+”&&Y=“+event.values[1]+”&&Z=“+event.values[2]”;
StringRequest StringRequest=new StringRequest(Request.Method.POST,url,new Response.Listener()){
@凌驾
公共void onResponse(字符串响应){
Log.i(“截击”,回应);
}
},new Response.ErrorListener(){
@凌驾
公共无效onErrorResponse(截击错误){
Log.e(“截击”,error.toString());
}
});

添加(stringRequest);
要更好地处理(为网络请求创建单例类),请签出下面的链接,
在您的url中,尝试使用而不是


这将在emulator中工作。

好的,你的nodejs服务器或android代码中可能有错误。是的,我知道…它在android控制台或js控制台中没有显示任何错误。我在onSensorChanged方法中编写了http请求,可能在其中的某个地方,我认为nodejs服务器正在打印任何其他请求,并使用它进行了检查postmanI使用此RequestQueue=Volley.newRequestQueue(此)替换了队列初始化;我收到一个权限被拒绝的错误您应该获得下面链接中描述的grand network权限…在继续之前,我几乎不建议您签出此链接谢谢使用我的主机wifi ip编辑本地主机。它现在可以工作了,谢谢!