Socket在onSensorchanged方法()中返回nullPointer [英] Socket returns nullPointer inside onSensorchanged method()

查看:78
本文介绍了Socket在onSensorchanged方法()中返回nullPointer的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我非常喜欢在我的android最后一年项目基于套接字...使用asynctask连接套接字等工作。在`doInBackground()`方法中,一切正常,但是当我尝试从中发送传感器数据时`onSensorChanged()`方法,我得到空指针异常。我不知道出了什么问题。总之,Socket在asyncTask类之外返回NULL ...可以帮助我吗?



  package  com.example.sensorsmart; 

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

import android.app.Activity;
import android.content.Context;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends 活动实现 SensorEventListener {


private < span class =code-keyword> static final int SERVERPORT = 8222 ;
private static final < span class =code-sdkkeyword> String
SERVER_IP = 192.168.0.101;
private SensorManager mSensorManager;
私人传感器mAccelerometer;
private TextView tv;
public ServerSocket serverSocket = null;
public Socket socket = null;
public BufferedReader in;
public BufferedWriter out;
public PrintWriter pw;
public FileWriter writer = null;

@ Override
protected void onCreate(Bundle savedInstanceState){
super .onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
new MyTask()。execute();
mSensorManager =(SensorManager)getSystemService(Context.SENSOR_SERVICE);
mAccelerometer mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
mSensorManager.registerListener( this ,mAccelerometer,SensorManager.SENSOR_DELAY_NORMAL);

}
public void onStopClick(查看视图){
mSensorManager.unregisterListener( this );}

private class MyTask extends AsyncTask< Void,Void,Void>
{
@ Override
protected Void doInBackground(Void .. .arg){

尝试 {
serverSocket = new ServerSocket ( 8222 );
} catch (IOException e){
e.printStackTrace();
}
尝试 {
socket = serverSocket.accept();
Log.i( TcpServer CONNECTED);
in = new BufferedReader( new InputStreamReader(socket.getInputStream()));
pw = new PrintWriter(socket.getOutputStream(),true);
if (!in.ready())
{
Log.i( TcpServer 读者不是READY);
}

// HERE SOCKET工作5n .....
final String g;
final String c;
字符串 b = null;
Log.i( TcpServer GOING);
g = in.readLine();
runOnUiThread( new Runnable(){
public void run(){
Toast.makeText(getApplicationContext(),g,Toast.LENGTH_LONG)。show();
}
});

} catch (IOException e){
e.printStackTrace();
String response = e.getCause()。toString();
Log.i( TCP,响应);
}
return null;
}

}


@覆盖
public void onSensorChanged(SensorEvent事件){
float x = event.values [ 0 ];
float y = event.values [ 1 ];
float z = event.values [ 2 ];

/ * **************** ********************************* /
SOCKET显示null 方法

/ * **** ************** /
pw.write( g); // 这里的点值异常

}
}





LOGCAT:

  02   -   06   11  31  54  250 :E / AndroidRuntime( 4108 ):致命异常:主
02 - 06 11 31 54 250 :E / AndroidRuntime( 4108 ):java.lang.NullPointerException
02 - 06 11 31 54 250 : E / AndroidRuntime( 4108 ):at com.example.sensorsmart.MainActivity.onSensorChanged(MainActivity.java: 196
02 - 06 11 31 54 250 :E / AndroidRuntime( 4108 ):在android.hardware.SystemSensorManager $ ListenerDelegate $ 1.handleMessage(SystemSensorManager.java: 204
02 - 06 11 31 54 250 :E / AndroidRuntime( 4108 ):在android.os.Handler.dispatchMessage(Handler.java: 99
02 - 06 11 31 54 250 :E / AndroidRuntime( 4108 ):在android .os.Looper.loop(Looper.java: 137
02 - 06 11 31 54 250 :E / AndroidRuntime( 4108 ):在android。 app.ActivityThread.main(ActivityThread.java: 4759
02 - 06 11 31 54 250 :E / AndroidRuntime( 4108 ):at java.lang .reflect.Method.invokeNative(NATIV e方法)
02 - 06 11 31 54 250 :E / AndroidRuntime( 4108 ):at java.lang.reflect.Method.invoke(Method.java: 511
02 - 06 11 31 54 250 :E / AndroidRuntime( 4108 ):at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java: 791
02 - 06 11 31 54 250 :E / AndroidRuntime( 4108 ):at com.android.internal.os.ZygoteInit.main(ZygoteInit.java: 558
02 - 06 11 31 54 250 :E / AndroidRuntime( 4108 ):at dalvik.system.NativeStart.main(Native Method)

解决方案

ListenerDelegate


1.handleMessage(SystemSensorManager.java: 204
02 - 06 11 31 54 250 :E / AndroidRuntime( 4108 ):在android.os.Handler.dispatchMessage(Handler.java: 99
02 - 06 11 31 54 250 :E / AndroidRuntime( 4108 ):在android.os.Looper.loop(Looper.java: 137
02 - 06 11 31 54 250 :E / AndroidRuntime( 4108 ):在android.app.ActivityThread.main(ActivityThread.java: 4759
02 - 06 11 31 54 250 :E / AndroidRuntime( 4108 ):at java.lang.reflect.Method.invokeNative(Native Method)
02 - 06 11 31 54 。< span class =code-digit> 250 :E / AndroidRuntime( 4108 ):at java.lang.reflect.Method.invoke(Method.java) : 511
02 - 06 11 31 54 250 :E / AndroidRuntime( 4108 ):at com.android.internal.os.ZygoteInit

MethodAndArgsCaller.run(ZygoteInit.java: 791
02 - 06 11 31 :<跨越式s =code-digit> 54 。 250 :E / AndroidRuntime( 4108 ) :at com.android.internal.os.ZygoteInit.main(ZygoteInit.java: 558
02 - 06 11 31 54 250 :E / AndroidRuntime( 4108 ):at dalvik.system.NativeStart.main(Native Method)


Hi frends im working on my android final year project based on sockets..im using asynctask to connect sockets etc..Everything works fine, in the `doInBackground()` method, but when I try to send Sensor data from the`onSensorChanged()` method, I get null pointer exception. I don't know what went wrong. in short Socket returns NULL outside asyncTask Class...can some 1 help me ?

package com.example.sensorsmart;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

import android.app.Activity;
import android.content.Context;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends Activity implements SensorEventListener{


private static final int SERVERPORT = 8222;
private static final String SERVER_IP = "192.168.0.101";
private SensorManager mSensorManager;
private Sensor mAccelerometer;
private   TextView tv ;
public ServerSocket serverSocket=null;
public Socket socket = null;
public BufferedReader in ;
public BufferedWriter out;
public PrintWriter pw ;
public FileWriter writer=null;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
new MyTask().execute();
mSensorManager = (SensorManager)getSystemService(Context.SENSOR_SERVICE);
mAccelerometer mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);   
mSensorManager.registerListener(this, mAccelerometer,SensorManager.SENSOR_DELAY_NORMAL);

}
public void onStopClick(View view) {
mSensorManager.unregisterListener(this);}

private class MyTask extends AsyncTask<Void, Void, Void>
{
@Override
protected Void doInBackground(Void... arg0) {

try {
serverSocket = new ServerSocket(8222);
} catch (IOException e) {
e.printStackTrace();
}
try {
socket=serverSocket.accept();
Log.i("TcpServer", "CONNECTED");
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
pw = new PrintWriter(socket.getOutputStream(),true);
if(!in.ready())
{
Log.i("TcpServer", "READER IS NOT READY");
}

//HERE SOCKET works 5n.....
final  String g;
final String c;
String b = null;
Log.i("TcpServer", "GOING");
g=in.readLine();
runOnUiThread(new Runnable() {
public void run() {
Toast.makeText(getApplicationContext(),g, Toast.LENGTH_LONG).show();
} 
});

} catch (IOException e) {
e.printStackTrace();
String  response = e.getCause().toString();
Log.i("TCP",response);
}
return null;
}

}


@Override
public void onSensorChanged(SensorEvent event) {
float x = event.values[0];
float y = event.values[1];
float z = event.values[2];

/**************************************************/
SOCKET Shows null Inside this method

/**************************************************/
pw.write("g");  //NULL POINT EXCEPTION THROWS HERE

}
}



LOGCAT:

02-06 11:31:54.250: E/AndroidRuntime(4108): FATAL EXCEPTION: main
02-06 11:31:54.250: E/AndroidRuntime(4108): java.lang.NullPointerException
02-06 11:31:54.250: E/AndroidRuntime(4108):     at    com.example.sensorsmart.MainActivity.onSensorChanged(MainActivity.java:196)
02-06 11:31:54.250: E/AndroidRuntime(4108):     at     android.hardware.SystemSensorManager$ListenerDelegate$1.handleMessage(SystemSensorManager.java:204)
02-06 11:31:54.250: E/AndroidRuntime(4108):     at android.os.Handler.dispatchMessage(Handler.java:99)
02-06 11:31:54.250: E/AndroidRuntime(4108):     at android.os.Looper.loop(Looper.java:137)
02-06 11:31:54.250: E/AndroidRuntime(4108):     at android.app.ActivityThread.main(ActivityThread.java:4759)
02-06 11:31:54.250: E/AndroidRuntime(4108):     at java.lang.reflect.Method.invokeNative(Native Method)
02-06 11:31:54.250: E/AndroidRuntime(4108):     at java.lang.reflect.Method.invoke(Method.java:511)
02-06 11:31:54.250: E/AndroidRuntime(4108):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:791)
02-06 11:31:54.250: E/AndroidRuntime(4108):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:558)
02-06 11:31:54.250: E/AndroidRuntime(4108):     at dalvik.system.NativeStart.main(Native Method)

解决方案

ListenerDelegate


1.handleMessage(SystemSensorManager.java:204) 02-06 11:31:54.250: E/AndroidRuntime(4108): at android.os.Handler.dispatchMessage(Handler.java:99) 02-06 11:31:54.250: E/AndroidRuntime(4108): at android.os.Looper.loop(Looper.java:137) 02-06 11:31:54.250: E/AndroidRuntime(4108): at android.app.ActivityThread.main(ActivityThread.java:4759) 02-06 11:31:54.250: E/AndroidRuntime(4108): at java.lang.reflect.Method.invokeNative(Native Method) 02-06 11:31:54.250: E/AndroidRuntime(4108): at java.lang.reflect.Method.invoke(Method.java:511) 02-06 11:31:54.250: E/AndroidRuntime(4108): at com.android.internal.os.ZygoteInit


MethodAndArgsCaller.run(ZygoteInit.java:791) 02-06 11:31:54.250: E/AndroidRuntime(4108): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:558) 02-06 11:31:54.250: E/AndroidRuntime(4108): at dalvik.system.NativeStart.main(Native Method)


这篇关于Socket在onSensorchanged方法()中返回nullPointer的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆