2017-05-26 247 views
1

我在我的android代碼中使用了Volley,HttpClient和HttpUrlConnection,它從傳感器管理器獲取傳感器指標。我需要通過POST請求將這些指標導出到nodejs服務器。每當有傳感器值的變化,我需要一個POST請求異步去http服務器android post請求使用volley

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])); 

} 
} 

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(/[`[email protected]#$%^&*()_|+\-?;:'",.<>\{\}\[\]\\\/]/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}`) 
}); 

我無法看到來自服務器的任何響應......?

+0

好的,您的nodejs服務器或您的android代碼中可能有錯誤。 – Denny

+0

Yaa我知道...它沒有顯示任何在Android控制檯或JS控制檯。我寫的onSensorChanged方法中的http請求,可能是在某個地方,我認爲 –

+0

該服務器的NodeJS爲任何其他要求印刷用郵差 –

回答

1

您創建請求對象,但從不將它發送到服務器。
你應該爲它設置一個請求隊列。

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); 

爲了更好的辦法(創建網絡請求一個單獨的類)結帳下面這個鏈接,
https://developer.android.com/training/volley/requestqueue.html

+0

它檢查我替換爲 請求隊列隊列= Volley.newRequestQueue(本)隊列insantiation; 我得到了拒絕的權限錯誤 –

+0

清單文件中授予的權限是什麼? –

+0

您應該在下面的鏈接中描述您的網絡權限。 https://developer.android.com/training/volley/simple.html ..在繼續之前,我幾乎不建議您檢出此鏈接 –