错误:空指针异常

时间:2014-02-24 06:49:56

标签: java android android-asynctask nullpointerexception

我正在尝试将值从android打印到java桌面服务器。我从其他android类获得了价值。我到这儿后,我只是想看看是否有任何显示。但在这里我得到空指针异常。它说客户端是空的。

我不知道,我哪里错了。你能指导我吗?

我只想将值从android传递给java桌面服务器。我希望很清楚。

onStart属于我所称的服务。

public void onStart(Intent intent, int startId) {               
    display();                          
    Toast.makeText(this, " Service Started", Toast.LENGTH_LONG).show();
}

我在课外写过这篇文章。

public void display() {
    PrintWriter printwriter;
    String messsage = "";

    final String IP_ADDRESS = "192.168.0.8";
    final int DEST_PORT = 4444;

    Socket client = null;
    try {
        client = new Socket(IP_ADDRESS, DEST_PORT); // connect to server
    } catch (UnknownHostException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
    // Write to server.
    try {

        printwriter = new PrintWriter(client.getOutputStream(), true);
        printwriter.write(messsage); // write the message to output stream
        printwriter.flush();
        printwriter.close();
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        try {
            client.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}               

如果我应该使用Asynctask,那么我该如何使用它?由于NullPointerException仅存在。

堆栈追踪:

FATAL EXCEPTION: main
java.lang.RuntimeException: Unable to start service com.example.wifisignalstrength.javaServiceClass@4175d9e8 with Intent { cmp=com.example.wifisignalstrength/.javaServiceClass (has extras) }: java.lang.NullPointerException
android.app.ActivityThread.handleServiceArgs(ActivityThread.java:2390)
android.app.ActivityThread.access$1900(ActivityThread.java:128)
android.app.ActivityThread$H.handleMessage(ActivityThread.java:1224)
android.os.Handler.dispatchMessage(Handler.java:99)
android.os.Looper.loop(Looper.java:137)
android.app.ActivityThread.main(ActivityThread.java:4517)
java.lang.reflect.Method.invokeNative(Native Method)
java.lang.reflect.Method.invoke(Method.java:511)
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:993)
com.android.internal.os.ZygoteInit.main(ZygoteInit.java:760)

dalvik.system.NativeStart.main(Native Method)
 Caused by: java.lang.NullPointerException
com.example.wifisignalstrength.javaServiceClass.display(javaServiceClass.java:80)
com.example.wifisignalstrength.javaServiceClass.onStart(javaServiceClass.java:40)

3 个答案:

答案 0 :(得分:0)

使用AsyncTask,如下所示......

public class ClientAsyncTask extends AsyncTask<Void, Void, Void> {

    @Override
    protected Void doInBackground(Void... params) {
        PrintWriter printwriter;
        String messsage = "";

        final String IP_ADDRESS = "192.168.0.8";
        final int DEST_PORT = 4444;

        Socket client = null;
        try {
            client = new Socket(IP_ADDRESS, DEST_PORT); // connect to server
        } catch (UnknownHostException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        // Write to server.
        try {

            printwriter = new PrintWriter(client.getOutputStream(), true);
            printwriter.write(messsage); // write the message to output stream
            printwriter.flush();
            printwriter.close();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                client.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return null;
    }

}

答案 1 :(得分:0)

如果client == null,那么client.getOutputStream()将会增加NullPointerException。这样:

if (client != null)
{
    //Second 'try' here
}

现在,192.168.0.8是私有IP。两个设备是否都连接到同一个内部网络?

答案 2 :(得分:0)

问题不在于client为空。这只是一个症状。行上出了点问题

client = new Socket(IP_ADDRESS, DEST_PORT);

在我引用的行中的异常之后,堆栈跟踪的底部来自您的finally块。所以你实际上有两个完整的堆栈跟踪,一个接一个。

第一个堆栈跟踪将告诉您出了什么问题。