i getting nullpointerexception when amtrying object through objectinputstream via socket. using server send information client (android phone) through transferobject. know server sending object because when sends error read fine , throws no exceptions. sent classes serializable, contain serialversionid, , contained in both projects.
code:
transferobject data = null; try { socket s = new socket(); s.connect(new inetsocketaddress(host, port), 10000); objectoutputstream oos = new objectoutputstream(s.getoutputstream()); objectinputstream ois = new objectinputstream(s.getinputstream()); send.setuser(useremail); send.setpassword(password); oos.writeobject(send); oos.flush(); object inputobject = ois.readobject(); //error happens here. data = (transferobject) inputobject; s.close(); return data; } and here transferobject:
public class transferobject implements serializable { private static final long serialversionuid = *******************l; //blanked out public string command; public string args; public object[] objects; private string password; private string user; public transferobject() { } public transferobject(string command, string args, object[] objects) { this.objects = objects; this.args = args; this.command = command; } public string getpassword() { return this.password; } public void setpassword(string password) { this.password = password; } public string getuser() { return this.user; } public void setuser(string user) { this.user = user; } } and lastly, dreaded log:
07-20 14:38:16.044: e/androidruntime(2451): fatal exception: asynctask #1 07-20 14:38:16.044: e/androidruntime(2451): process: com.********************.**********.timecardmanager, pid: 2451 07-20 14:38:16.044: e/androidruntime(2451): java.lang.runtimeexception: error occured while executing doinbackground() 07-20 14:38:16.044: e/androidruntime(2451): @ android.os.asynctask$3.done(asynctask.java:304) 07-20 14:38:16.044: e/androidruntime(2451): @ java.util.concurrent.futuretask.finishcompletion(futuretask.java:355) 07-20 14:38:16.044: e/androidruntime(2451): @ java.util.concurrent.futuretask.setexception(futuretask.java:222) 07-20 14:38:16.044: e/androidruntime(2451): @ java.util.concurrent.futuretask.run(futuretask.java:242) 07-20 14:38:16.044: e/androidruntime(2451): @ android.os.asynctask$serialexecutor$1.run(asynctask.java:231) 07-20 14:38:16.044: e/androidruntime(2451): @ java.util.concurrent.threadpoolexecutor.runworker(threadpoolexecutor.java:1112) 07-20 14:38:16.044: e/androidruntime(2451): @ java.util.concurrent.threadpoolexecutor$worker.run(threadpoolexecutor.java:587) 07-20 14:38:16.044: e/androidruntime(2451): @ java.lang.thread.run(thread.java:818) 07-20 14:38:16.044: e/androidruntime(2451): caused by: java.lang.nullpointerexception: attempt invoke virtual method 'boolean java.lang.class.isproxy()' on null object reference 07-20 14:38:16.044: e/androidruntime(2451): @ java.lang.reflect.proxy.isproxyclass(proxy.java:261) 07-20 14:38:16.044: e/androidruntime(2451): @ java.io.objectstreamclass.resolveproperties(objectstreamclass.java:1016) 07-20 14:38:16.044: e/androidruntime(2451): @ java.io.objectstreamclass.isenum(objectstreamclass.java:1040) 07-20 14:38:16.044: e/androidruntime(2451): @ java.io.objectstreamclass.checkandgettcobjectclass(objectstreamclass.java:1341) 07-20 14:38:16.044: e/androidruntime(2451): @ java.io.objectinputstream.readnewobject(objectinputstream.java:1788) 07-20 14:38:16.044: e/androidruntime(2451): @ java.io.objectinputstream.readcontent(objectinputstream.java:707) 07-20 14:38:16.044: e/androidruntime(2451): @ java.io.objectinputstream.discarddata(objectinputstream.java:636) 07-20 14:38:16.044: e/androidruntime(2451): @ java.io.objectinputstream.readobjectforclass(objectinputstream.java:1348) 07-20 14:38:16.044: e/androidruntime(2451): @ java.io.objectinputstream.readhierarchy(objectinputstream.java:1242) 07-20 14:38:16.044: e/androidruntime(2451): @ java.io.objectinputstream.readnewobject(objectinputstream.java:1835) 07-20 14:38:16.044: e/androidruntime(2451): @ java.io.objectinputstream.readnonprimitivecontent(objectinputstream.java:761) 07-20 14:38:16.044: e/androidruntime(2451): @ java.io.objectinputstream.readobject(objectinputstream.java:1983) 07-20 14:38:16.044: e/androidruntime(2451): @ java.io.objectinputstream.readobject(objectinputstream.java:1940) 07-20 14:38:16.044: e/androidruntime(2451): @ java.io.objectinputstream.readfieldvalues(objectinputstream.java:1113) 07-20 14:38:16.044: e/androidruntime(2451): @ java.io.objectinputstream.defaultreadobject(objectinputstream.java:454) 07-20 14:38:16.044: e/androidruntime(2451): @ java.io.objectinputstream.readobjectforclass(objectinputstream.java:1345) 07-20 14:38:16.044: e/androidruntime(2451): @ java.io.objectinputstream.readhierarchy(objectinputstream.java:1242) 07-20 14:38:16.044: e/androidruntime(2451): @ java.io.objectinputstream.readnewobject(objectinputstream.java:1835) 07-20 14:38:16.044: e/androidruntime(2451): @ java.io.objectinputstream.readnonprimitivecontent(objectinputstream.java:761) 07-20 14:38:16.044: e/androidruntime(2451): @ java.io.objectinputstream.readobject(objectinputstream.java:1983) 07-20 14:38:16.044: e/androidruntime(2451): @ java.io.objectinputstream.readobject(objectinputstream.java:1940) 07-20 14:38:16.044: e/androidruntime(2451): @ java.io.objectinputstream.readnewarray(objectinputstream.java:1488) 07-20 14:38:16.044: e/androidruntime(2451): @ java.io.objectinputstream.readnonprimitivecontent(objectinputstream.java:759) 07-20 14:38:16.044: e/androidruntime(2451): @ java.io.objectinputstream.readobject(objectinputstream.java:1983) 07-20 14:38:16.044: e/androidruntime(2451): @ java.io.objectinputstream.readobject(objectinputstream.java:1940) 07-20 14:38:16.044: e/androidruntime(2451): @ java.io.objectinputstream.readfieldvalues(objectinputstream.java:1113) 07-20 14:38:16.044: e/androidruntime(2451): @ java.io.objectinputstream.defaultreadobject(objectinputstream.java:454) 07-20 14:38:16.044: e/androidruntime(2451): @ java.io.objectinputstream.readobjectforclass(objectinputstream.java:1345) 07-20 14:38:16.044: e/androidruntime(2451): @ java.io.objectinputstream.readhierarchy(objectinputstream.java:1242) 07-20 14:38:16.044: e/androidruntime(2451): @ java.io.objectinputstream.readnewobject(objectinputstream.java:1835) 07-20 14:38:16.044: e/androidruntime(2451): @ java.io.objectinputstream.readnonprimitivecontent(objectinputstream.java:761) 07-20 14:38:16.044: e/androidruntime(2451): @ java.io.objectinputstream.readobject(objectinputstream.java:1983) 07-20 14:38:16.044: e/androidruntime(2451): @ java.io.objectinputstream.readobject(objectinputstream.java:1940) 07-20 14:38:16.044: e/androidruntime(2451): @ com.********************.**********.timecardmanager.mainactivity.sendtoserver(mainactivity.java:158) 07-20 14:38:16.044: e/androidruntime(2451): @ com.********************.**********.timecardmanager.timecardfragment$getcardstask.doinbackground(timecardfragment.java:81) 07-20 14:38:16.044: e/androidruntime(2451): @ com.********************.**********.timecardmanager.timecardfragment$getcardstask.doinbackground(timecardfragment.java:1) 07-20 14:38:16.044: e/androidruntime(2451): @ android.os.asynctask$2.call(asynctask.java:292) 07-20 14:38:16.044: e/androidruntime(2451): @ java.util.concurrent.futuretask.run(futuretask.java:237) 07-20 14:38:16.044: e/androidruntime(2451): ... 4 more thanks in advance.
edit: server side. run each time new client connects on new thread.
try { objectoutputstream oos = new objectoutputstream(soc.getoutputstream()); objectinputstream ois = new objectinputstream(soc.getinputstream()); transferobject obj = (transferobject) ois.readobject(); switch(obj.command) { case "req": javatimecard[] javacards = bullhorntools.getjavacards(obj.getuser(), obj.getpassword()); if(javacards == null) { obj.command = "err"; obj.args = bullhorntools.geterror(); obj.setuser(""); obj.setpassword(""); oos.writeobject(obj); oos.flush(); } else { obj.command = "akk"; obj.args = ""; obj.objects = new object[javacards.length]; obj.setuser(""); obj.setpassword(""); for(int = 0; < javacards.length; i++) { obj.objects[i] = javacards[i]; } oos.writeobject(obj); oos.flush(); } break; case "save": //todo: implement later break; } soc.close(); } catch (ioexception e) { e.printstacktrace(); } catch (classnotfoundexception e) { e.printstacktrace(); }
i tried test serializing, storing in file, , reading in. worked fine, therefore i'm going assume android thing. selvin said, used json.
as possible lack of clearness, apologize.
Comments
Post a Comment