在电脑上面运行的好好的socket程序,放到Android上面就老出现空指针异常
明天老师要东西的时候,我怎么演示给他看啊,一堆的空指针异常!!!
我怎么办啊?找了好几个人都解决不了,难道是疑难绝症吗????????????

解决方案 »

  1.   

    程序信息见帖子:那一解决的Socket空指针异常,大家帮我看一吧!!!!!!!!!!!!!!!!!!!!!!!!!!!! [移动平台 Android] 
      

  2.   

    出现空指针异常的地方用红色标出。
    public static Response sendTextRequest(Request request) throws IOException {
    Response response = null;
    try {
    // 发送请求
    System.out.println(request.getAttribute("id"));
    System.out.println(request.getAttribute("pwdFld"));
    ClientDataBuffer.oos.writeObject(request);
    ClientDataBuffer.oos.flush();
    System.out.println("客户端发送了请求对象:" + request.getAction());
      

  3.   

    出现空指针异常的地方用红色标出。
    public static Response sendTextRequest(Request request) throws IOException {
    Response response = null;
    try {
    // 发送请求
    System.out.println(request.getAttribute("id"));//有值
    System.out.println(request.getAttribute("pwdFld"));//有值
    System.out.println(ClientDataBuffer.oos);//为空
    ClientDataBuffer.oos.writeObject(request);
    ClientDataBuffer.oos.flush();
    System.out.println("客户端发送了请求对象:" + request.getAction());ClientDataBufferhi是客户端缓存,
    /** 客户端数据缓存 */
    public class ClientDataBuffer
    {
    public static String currentUser; /** 当前客户端的用户信息 */
    public static String onlineUsers;/** 在线用户列表 */
    public static Socket clientSocket;/** 当前客户端连接到服务器的套节字 */
    public static ObjectOutputStream oos;/** 当前客户端连接到服务器的输出流 */
    public static ObjectInputStream ois;/** 当前客户端连接到服务器的输入流 */
    public static Properties configProp;/** 服务器配置参数属性集 */
    //public static Dimension screenSize;/** 当前客户端的屏幕尺寸 */
    public static String ip ;/** 本客户端的IP地址 */
    public static final int RECEIVE_FILE_PORT = 6666;/** 用来接收文件的端口 */
    static{
    //screenSize = Toolkit.getDefaultToolkit().getScreenSize();
    configProp = new Properties();//加载服务器配置文件
    try {
    ip = InetAddress.getLocalHost().getHostAddress();
    configProp.load(Thread.currentThread().getContextClassLoader().getResourceAsStream("serverconfig.properties"));
    } catch (IOException e) {e.printStackTrace();}
    }
    private ClientDataBuffer(){
    clientSocket = new Socket();

    }
    }
      

  4.   

    到底谁空,那个对象?ClientDataBuffer?这个吗
      

  5.   

    +1
    LZ可否提供错误日志应该是oos这个静态成员变量初始化的地方有问题,楼主可否查看一下相应的代码
      

  6.   


    我就是确定不了到底哪个为空,所以才解决不了这个问题的。
    这是错误日志:
    11-13 08:29:26.107: ERROR/AndroidRuntime(374): java.lang.NullPointerException
    11-13 08:29:26.107: ERROR/AndroidRuntime(374):     at com.Client.ClientUtil.sendTextRequest(ClientUtil.java:17)
    11-13 08:29:26.107: ERROR/AndroidRuntime(374):     at com.Client.LoginActivity$2.onClick(LoginActivity.java:88)
    11-13 08:29:26.107: ERROR/AndroidRuntime(374):     at android.view.View.performClick(View.java:2485)
    11-13 08:29:26.107: ERROR/AndroidRuntime(374):     at android.view.View$PerformClick.run(View.java:9080)
    11-13 08:29:26.107: ERROR/AndroidRuntime(374):     at android.os.Handler.handleCallback(Handler.java:587)
    11-13 08:29:26.107: ERROR/AndroidRuntime(374):     at android.os.Handler.dispatchMessage(Handler.java:92)
    11-13 08:29:26.107: ERROR/AndroidRuntime(374):     at android.os.Looper.loop(Looper.java:123)
    11-13 08:29:26.107: ERROR/AndroidRuntime(374):     at android.app.ActivityThread.main(ActivityThread.java:3683)
    11-13 08:29:26.107: ERROR/AndroidRuntime(374):     at java.lang.reflect.Method.invokeNative(Native Method)
    11-13 08:29:26.107: ERROR/AndroidRuntime(374):     at java.lang.reflect.Method.invoke(Method.java:507)
    11-13 08:29:26.107: ERROR/AndroidRuntime(374):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
    11-13 08:29:26.107: ERROR/AndroidRuntime(374):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
    11-13 08:29:26.107: ERROR/AndroidRuntime(374):     at dalvik.system.NativeStart.main(Native Method)
      

  7.   


    System.out.println(request.getAttribute("id"));//有值
    System.out.println(request.getAttribute("pwdFld"));//有值
    System.out.println(ClientDataBuffer.oos);//为空
    这些都是我打印的,在出现异常的那句话中ClientDataBuffer.oos.writeObject(request);
    我已经把能打印的都打印了,从结果来看,肯定是ClientDataBuffer.oos.出现的异常,所以我就在试了一下:
    ObjectOutputStream oos;
    oos.writeObject(request);结果还是为空,所以我判断不是oos出现的空指针异常,那么就只剩下ClientDataBuffer了,上面我已经吧ClientDataBuffer.java的代码贴出来了,我实在看不出里面有什么问题,
      

  8.   

    System.out.println(ClientDataBuffer),ClientDataBuffer这个是空吗?
      

  9.   


    ClientDataBuffer不能打印,
    System.out.println(ClientDataBuffer)会显示错误
      

  10.   

    这一些程序我用在PC版客户端上,都是运行良好的,莫非是在Android上,socket的使用方法有所不同?
      

  11.   

    System.out.println(ClientDataBuffer.oos);//为空只看这一句就知道oos必然没有初始化,也难怪报空了,检查一下逻辑吧,看看运行下来的时候这个oos初始化没有
      

  12.   


    没找到这段代码里面有赋值给oos的代码,查下serverconfig.properties里面吧
      

  13.   

    说了半天初始化oos,到底要怎样初始化它呢?我越来越糊涂了。
    哪位给个初始化例子啊????