android - App showing Unfortunately, (appname) stopped. up to 3 times after closing the application -
i beginner trying learn service
in android.... when run following code, working correctly when app active. after closing app recent app list, showing dialog "unfortunately, (appname) stopped." 3 times , stops. when not calling create_socket()
working correctly expected showing log
of value i
..... please help.
package com.example.runwaylabz.canvi; import android.app.alarmmanager; import android.app.pendingintent; import android.app.service; import android.content.context; import android.content.intent; import android.os.asynctask; import android.os.ibinder; import android.os.systemclock; import android.support.annotation.nullable; import android.util.log; import org.apache.commons.io.ioutils; import java.io.ioexception; import java.io.inputstream; import java.io.outputstream; import java.net.socket; import xdroid.toaster.toaster; public class socketconnection extends service { private static socket socket; private static inputstream inputstream; private static outputstream outputstream; private static string ip; private static int port; private static socketconnection socketconnection = null; public socketconnection() { super(); } @override public int onstartcommand(intent intent, int flags, int startid) { asynctask asynctask = new asynctask() { @override protected object doinbackground(object[] objects) { new thread(new runnable() { @override public void run() { int = 1; while (i > 0) { log.i("hi", "" + i); i++; } } }).start(); create_socket(); return null; } }; asynctask.execute(); return start_sticky; } private static class instancehelper { private static final socketconnection instance = new socketconnection(); } public static socketconnection getinstance(string ip, int port) { socketconnection = instancehelper.instance; socketconnection.setip(ip); socketconnection.setport(port); return socketconnection; } @nullable @override public ibinder onbind(intent intent) { return null; } @override public void oncreate() { super.oncreate(); } public void create_socket() { new thread(new runnable() { @override public void run() { try { socket = new socket(ip, port); if(socket.isconnected()){ log.w("debug","socket created"); } } catch (ioexception e) { e.printstacktrace(); } try { inputstream = socket.getinputstream(); } catch (ioexception e) { e.printstacktrace(); } try { outputstream = socket.getoutputstream(); } catch (ioexception e) { e.printstacktrace(); } } }).start(); } public void close_socket(){ new thread(new runnable() { @override public void run() { ioutils.closequietly(inputstream); inputstream=null; if(inputstream==null){ log.w("debug","inputstream closed"); } else { log.w("debug","inputstreaam not closed"); } while(inputstream==null){ ioutils.closequietly(inputstream); } ioutils.closequietly(outputstream); outputstream=null; if(outputstream==null){ log.w("debug","outputstream closed"); } else { log.w("debug","outputstreaam not closed"); } while(outputstream==null){ ioutils.closequietly(outputstream); } try { socket.close(); socket=null; } catch (ioexception e) { if(!socket.isclosed()){ try { socket.close(); socket=null; } catch (ioexception e1) { e1.printstacktrace(); } } e.printstacktrace(); } if(socket==null){ log.w("debug","socket closed"); } else { log.w("debug","socket not closed"); } } }).start(); } public static void writeouputstream(final string outputstreamstring) { new thread(new runnable() { @override public void run() { try { ioutils.write(("12345678" + outputstreamstring).getbytes("ascii"), outputstream); } catch (ioexception e) { e.printstacktrace(); } } }).start(); } public void setport(int port) { this.port = port; } public void setip(string ip) { this.ip = ip; } public static void setsocket(socket socket) { socketconnection.socket = socket; } public static void setoutputstream(outputstream outputstream) { socketconnection.outputstream = outputstream; } public static void setinputstream(inputstream inputstream) { socketconnection.inputstream = inputstream; } public static inputstream getinputstream() { return inputstream; } public int getport() { return port; } public static outputstream getoutputstream() { return outputstream; } public static socket getsocket() { return socket; } public string getip() { return ip; } @override public void ontaskremoved(intent rootintent) { close_socket(); intent restartservice = new intent(getapplicationcontext(), getinstance(ip,port).getclass()); restartservice.setpackage(getpackagename()); pendingintent restartservicepi = pendingintent.getservice( getapplicationcontext(), 1, restartservice, pendingintent.flag_one_shot); alarmmanager alarmservice = (alarmmanager)getapplicationcontext().getsystemservice(context.alarm_service); alarmservice.set(alarmmanager.elapsed_realtime, systemclock.elapsedrealtime() +1000, restartservicepi); } }
and logcat after closing application is
39 26530-26558/com.example.runwaylabz.canvi w/system.err: java.net.connectexception: failed connect localhost/127.0.0.1 (port 0) after 90000ms: isconnected failed: econnrefused (connection refused) 08-01 20:21:32.839 26530-26558/com.example.runwaylabz.canvi w/system.err: @ libcore.io.iobridge.isconnected(iobridge.java:267) 08-01 20:21:32.839 26530-26558/com.example.runwaylabz.canvi w/system.err: @ libcore.io.iobridge.connecterrno(iobridge.java:191) 08-01 20:21:32.839 26530-26558/com.example.runwaylabz.canvi w/system.err: @ libcore.io.iobridge.connect(iobridge.java:127) 08-01 20:21:32.840 26530-26558/com.example.runwaylabz.canvi w/system.err: @ java.net.plainsocketimpl.connect(plainsocketimpl.java:188) 08-01 20:21:32.840 26530-26558/com.example.runwaylabz.canvi w/system.err: @ java.net.plainsocketimpl.connect(plainsocketimpl.java:168) 08-01 20:21:32.840 26530-26558/com.example.runwaylabz.canvi w/system.err: @ java.net.socket.startupsocket(socket.java:609) 08-01 20:21:32.840 26530-26558/com.example.runwaylabz.canvi w/system.err: @ java.net.socket.tryalladdresses(socket.java:137) 08-01 20:21:32.840 26530-26558/com.example.runwaylabz.canvi w/system.err: @ java.net.socket.<init>(socket.java:187) 08-01 20:21:32.840 26530-26558/com.example.runwaylabz.canvi w/system.err: @ java.net.socket.<init>(socket.java:159) 08-01 20:21:32.840 26530-26558/com.example.runwaylabz.canvi w/system.err: @ com.example.runwaylabz.canvi.socketconnection$2.run(socketconnection.java:105) 08-01 20:21:32.840 26530-26558/com.example.runwaylabz.canvi w/system.err: @ java.lang.thread.run(thread.java:818) 08-01 20:21:32.840 26530-26558/com.example.runwaylabz.canvi w/system.err: caused by: android.system.errnoexception: isconnected failed: econnrefused (connection refused) 08-01 20:21:32.840 26530-26558/com.example.runwaylabz.canvi w/system.err: @ libcore.io.iobridge.isconnected(iobridge.java:252) 08-01 20:21:32.840 26530-26558/com.example.runwaylabz.canvi w/system.err: ... 10 more 08-01 20:21:32.841 26530-26558/com.example.runwaylabz.canvi e/androidruntime: fatal exception: thread-29548 process: com.example.runwaylabz.canvi, pid: 26530 java.lang.nullpointerexception: attempt invoke virtual method 'java.io.inputstream java.net.socket.getinputstream()' on null object reference @ com.example.runwaylabz.canvi.socketconnection$2.run(socketconnection.java:115) @ java.lang.thread.run(thread.java:818)
Comments
Post a Comment