Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 错误:空指针异常_Java_Android_Android Asynctask_Nullpointerexception - Fatal编程技术网

Java 错误:空指针异常

Java 错误:空指针异常,java,android,android-asynctask,nullpointerexception,Java,Android,Android Asynctask,Nullpointerexception,我正在尝试将值从android打印到java桌面服务器。我从其他android类中获得了值。在我到达这里之后,我只是想看看是否有什么东西显示出来。但是这里我得到了空指针异常。它表示客户端为空 我不知道,我错在哪里。你能指导我做这件事吗 我只想将值从android传递到java桌面服务器。我希望这是清楚的 这个onStart是我调用的服务的一部分 public void onStart(Intent intent, int startId) { display

我正在尝试将值从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
,那么我该如何使用它呢?As
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)

使用
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;
    }

}
公共类ClientAsyncTask扩展了AsyncTask{
@凌驾
受保护的Void doInBackground(Void…参数){
印刷作家印刷作家;
字符串message=“”;
最终字符串IP_ADDRESS=“192.168.0.8”;
最终int DEST_端口=4444;
socketclient=null;
试一试{
client=newsocket(IP_地址,DEST_端口);//连接到服务器
}捕获(未知后异常e){
e、 printStackTrace();
}捕获(IOE异常){
e、 printStackTrace();
}
//写入服务器。
试一试{
printwriter=新的printwriter(client.getOutputStream(),true);
write(message);//将消息写入输出流
printwriter.flush();
printwriter.close();
}捕获(IOE异常){
e、 printStackTrace();
}最后{
试一试{
client.close();
}捕获(IOE异常){
e、 printStackTrace();
}
}
返回null;
}
}

如果
client==null
,则
client.getOutputStream()
将引发
NullPointerException
。因此:

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

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

问题不在于
客户端
为空。那只是一种症状。线路出了问题

client = new Socket(IP_ADDRESS, DEST_PORT);
堆栈跟踪的底部来自
finally
块,位于我引用的行中的异常之后。实际上,你有两个完整的堆栈跟踪,一个接一个


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

在此添加堆栈跟踪logcat错误在哪里?请发布异常的堆栈跟踪。堆栈跟踪添加了哪一个是第80行?我无法从java服务类调用Asynctask。我尝试在Android中从onStart调用asynctask执行方法。我试图在java中保留asynctask方法,因此asynctask无法执行。在服务类中将新Asyntask.execute(消息)保持为start/oncreate时,在新Asyntask.execute中获取错误。