我正在尝试将值从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)
答案 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
块。所以你实际上有两个完整的堆栈跟踪,一个接一个。
第一个堆栈跟踪将告诉您出了什么问题。