Java 错误:空指针异常
我正在尝试将值从android打印到java桌面服务器。我从其他android类中获得了值。在我到达这里之后,我只是想看看是否有什么东西显示出来。但是这里我得到了空指针异常。它表示客户端为空 我不知道,我错在哪里。你能指导我做这件事吗 我只想将值从android传递到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
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
,那么我该如何使用它呢?AsNullPointerException
将仅存在
堆栈跟踪:
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中获取错误。