2012-08-29 3 views
0

json 서버를 보내고 json을 listview에 표시하려고합니다. listview는 refreshViewModels() 메소드로 처리됩니다. 전송중인 json 문자열은 다음 코드 줄에 있습니다.Android SocketException - 서버에서 정보를받지 못했습니다.

outputJSONserv = "{\"to \ ": \"type \ ": \"1 \ ", \"payload \ ":"+ outputJSON + "}"; 여기서 outputJSON은 json 문자열입니다.

이 문자열을 보낼 때 한 전화에서는 문자열이 반환되지만 다른 문자는 그렇지 않습니다. 내가 logcat에 내 출력 JSON에 대한 SocketException과 관련이 있다는 오류가 있다는 경고가 표시됩니다.

E/AndroidClient(25069): Sent dataOutputStream 
E/AndroidClient(25069): Before initEventHandlers 
E/AndroidClient(25069): After initEventHandlers 
E/AndroidClient(25069): Start Repeat Timer 
E/AndroidClient(25069): In RepeatingTask() 
E/AndroidClient(25069): Before inputJSON String 
E/AndroidClient(25069): Hello String:[email protected] 
E/AndroidClient(25069): Hello String2: 
D/dalvikvm(25069): GC_FOR_MALLOC freed 174 objects/809424 bytes in 94ms 
W/System.err(25069): java.net.SocketException: Socket is closed 
W/System.err(25069): at org.apache.harmony.luni.net.PlainSocketImpl.getOutputStream(PlainSocketImpl.java:306) 
W/System.err(25069): at java.net.Socket.getOutputStream(Socket.java:515) 
W/System.err(25069): at com.iconnexus.client.AndroidClient.sendBytes(AndroidClient.java:379) 
W/System.err(25069): at com.iconnexus.client.AndroidClient$RepeatingTask.run(AndroidClient.java:499) 
W/System.err(25069): at java.util.Timer$TimerImpl.run(Timer.java:289) 
E/AndroidClient(25069): IN REPEATINGTHREAD-INPUTJSON3: 
I/ActivityManager( 110): Displayed activity com.iconnexus.client/.AndroidClient: 2234 ms (total 2234 ms) 
E/AndroidClient(25069): IN REPEATINGTHREAD-INPUTJSON 
D/dalvikvm(25069): GC_FOR_MALLOC freed 357 objects/778680 bytes in 198ms 
W/System.err(25069): java.net.SocketException: Socket is closed 
W/System.err(25069): at org.apache.harmony.luni.net.PlainSocketImpl.getOutputStream(PlainSocketImpl.java:306) 
W/System.err(25069): at java.net.Socket.getOutputStream(Socket.java:515) 
W/System.err(25069): at com.iconnexus.client.AndroidClient.sendBytes(AndroidClient.java:379) 
W/System.err(25069): at com.iconnexus.client.AndroidClient$RepeatingTask.run(AndroidClient.java:499) 
W/System.err(25069): at java.util.Timer$TimerImpl.run(Timer.java:289) 
E/AndroidClient(25069): IN REPEATINGTHREAD-INPUTJSON3: 
I/WindowManager( 110): home key test1= 1 
D/WindowManager( 110): Home Key Test : false : false 
D/WindowManager( 110): Home Key Test : false : false 
I/ActivityManager( 110): Starting activity: Intent { act=android.intent.action.MAIN cat=[android.intent.category.HOME] flg=0x10200000 cmp=com.android.launcher/com.android.launcher2.Launcher } 
W/InputManagerService( 110): Ignoring hideSoftInput of: [email protected] 
E/AndroidClient(25069): IN REPEATINGTHREAD-INPUTJSON 
D/dalvikvm(25069): GC_FOR_MALLOC freed 322 objects/778768 bytes in 182ms 
W/System.err(25069): java.net.SocketException: Socket is closed 
W/System.err(25069): at org.apache.harmony.luni.net.PlainSocketImpl.getOutputStream(PlainSocketImpl.java:306) 
W/System.err(25069): at java.net.Socket.getOutputStream(Socket.java:515) 
W/System.err(25069): at com.iconnexus.client.AndroidClient.sendBytes(AndroidClient.java:379) 
W/System.err(25069): at com.iconnexus.client.AndroidClient$RepeatingTask.run(AndroidClient.java:499) 
W/System.err(25069): at java.util.Timer$TimerImpl.run(Timer.java:289) 
E/AndroidClient(25069): IN REPEATINGTHREAD-INPUTJSON3: 
I/ActivityManager( 110): Starting activity: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=org.jtb.alogcat/.LogActivity } 
D/dalvikvm(1827): GC_FOR_MALLOC freed 8088 objects/813080 bytes in 104ms 
E/AndroidClient(25069): IN REPEATINGTHREAD-INPUTJSON 
D/dalvikvm(25069): GC_FOR_MALLOC freed 131 objects/770248 bytes in 186ms 
W/System.err(25069): java.net.SocketException: Socket is closed 
W/System.err(25069): at org.apache.harmony.luni.net.PlainSocketImpl.getOutputStream(PlainSocketImpl.java:306) 
W/System.err(25069): at java.net.Socket.getOutputStream(Socket.java:515) 
W/System.err(25069): at com.iconnexus.client.AndroidClient.sendBytes(AndroidClient.java:379) 
W/System.err(25069): at com.iconnexus.client.AndroidClient$RepeatingTask.run(AndroidClient.java:499) 
W/System.err(25069): at java.util.Timer$TimerImpl.run(Timer.java:289) 
E/AndroidClient(25069): IN REPEATINGTHREAD-INPUTJSON3: 

에서 onCreate() 메소드 : 전화 (2)에서

I/ActivityManager( 110): Config changed: { scale=1.0 imsi=310/0 loc=en_US touch=3  keys=1/1/2 nav=1/1 orien=1 layout=18 uiMode=17 seq=31} 
I/ActivityManager( 110): Starting activity: Intent { act=android.intent.action.MAIN cat=[android.intent.category.HOME] flg=0x10200000 cmp=com.android.launcher/com.android.launcher2.Launcher } 
W/InputManagerService( 110): Ignoring hideSoftInput of: com.android.internal.view.IInputMethodClient$Stub$P[email protected] 
I/ActivityManager( 110): Starting activity: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.google.android.gm/.ConversationListActivityGmail bnds=[83,240][157,319] } 
--------- beginning of /dev/log/main 
W/System.err(2263): java.net.SocketException: Socket is closed 
W/System.err(2263): at org.apache.harmony.luni.net.PlainSocketImpl.getOutputStream(PlainSocketImpl.java:306) 
W/System.err(2263): at java.net.Socket.getOutputStream(Socket.java:515) 
W/System.err(2263): at com.iconnexus.client.AndroidClient.sendBytes(AndroidClient.java:379) 
W/System.err(2263): at com.iconnexus.client.AndroidClient$RepeatingTask.run(AndroidClient.java:499) 
W/System.err(2263): at java.util.Timer$TimerImpl.run(Timer.java:289) 
E/AndroidClient(2263): IN REPEATINGTHREAD-INPUTJSON3:{"from":"65.46.170.6:14842","type":11,"payload":{"message":""}} 
E/AndroidClient(2263): IN REPEATINGTHREAD-INPUTJSON 
D/dalvikvm(2263): GC_FOR_MALLOC freed 131 objects/1883144 bytes in 216ms 
W/System.err(2263): java.net.SocketException: Socket is closed 
W/System.err(2263): at org.apache.harmony.luni.net.PlainSocketImpl.getOutputStream(PlainSocketImpl.java:306) 
W/System.err(2263): at java.net.Socket.getOutputStream(Socket.java:515) 
W/System.err(2263): at com.iconnexus.client.AndroidClient.sendBytes(AndroidClient.java:379) 
W/System.err(2263): at com.iconnexus.client.AndroidClient$RepeatingTask.run(AndroidClient.java:499) 
W/System.err(2263): at java.util.Timer$TimerImpl.run(Timer.java:289) 
E/AndroidClient(2263): IN REPEATINGTHREAD-INPUTJSON3: 
E/AndroidClient(2263): IN REPEATINGTHREAD-INPUTJSON 
D/dalvikvm(2263): GC_FOR_MALLOC freed 131 objects/1883016 bytes in 221ms 
W/System.err(2263): java.net.SocketException: Socket is closed 
W/System.err(2263): at org.apache.harmony.luni.net.PlainSocketImpl.getOutputStream(PlainSocketImpl.java:306) 
W/System.err(2263): at java.net.Socket.getOutputStream(Socket.java:515) 
W/System.err(2263): at com.iconnexus.client.AndroidClient.sendBytes(AndroidClient.java:379) 
W/System.err(2263): at com.iconnexus.client.AndroidClient$RepeatingTask.run(AndroidClient.java:499) 
W/System.err(2263): at java.util.Timer$TimerImpl.run(Timer.java:289) 
E/AndroidClient(2263): IN REPEATINGTHREAD-INPUTJSON3: 
E/AndroidClient(2263): IN REPEATINGTHREAD-INPUTJSON 
D/dalvikvm(2263): GC_FOR_MALLOC freed 131 objects/1883016 bytes in 214ms 
W/System.err(2263): java.net.SocketException: Socket is closed 
W/System.err(2263): at oorg.apache.harmony.luni.net.PlainSocketImpl.getOutputStream(PlainSocketImpl.java:306) 
W/System.err(2263): at java.net.Socket.getOutputStream(Socket.java:515) 
W/System.err(2263): at com.iconnexus.client.AndroidClient.sendBytes(AndroidClient.java:379) 
W/System.err(2263): at com.iconnexus.client.AndroidClient$RepeatingTask.run(AndroidClient.java:499) 
W/System.err(2263): at java.util.Timer$TimerImpl.run(Timer.java:289) 
E/AndroidClient(2263): IN REPEATINGTHREAD-INPUTJSON3: 
D/WindowManager( 110): Home Key Test : false : false 
D/PhoneWindow( 423): couldn't save which view has focus because the focused view [email protected] has no id. 
D/Gmail ( 423): [email protected] onPause() finished 
I/ActivityManager( 110): Starting activity: Intent { act=android.intent.action.MAIN cat=[android.intent.category.HOME] flg=0x10200000 cmp=com.android.launcher/com.android.launcher2.Launcher } 
W/InputManagerService( 110): Ignoring hideSoftInput of: [email protected] 
D/dalvikvm(2263): GC_FOR_MALLOC freed 131 objects/1883016 bytes in 309ms 
W/System.err(2263): java.net.SocketException: Socket is closed 
W/System.err(2263): at org.apache.harmony.luni.net.PlainSocketImpl.getOutputStream(PlainSocketImpl.java:306) 
W/System.err(2263): at java.net.Socket.getOutputStream(Socket.java:515) 
W/System.err(2263): at com.iconnexus.client.AndroidClient.sendBytes(AndroidClient.java:379) 
W/System.err(2263): at com.iconnexus.client.AndroidClient$RepeatingTask.run(AndroidClient.java:499) 
W/System.err(2263): at java.util.Timer$TimerImpl.run(Timer.java:289) 
E/AndroidClient(2263): IN REPEATINGTHREAD-INPUTJSON3: 
E/AndroidClient(2263): IN REPEATINGTHREAD-INPUTJSON 
D/dalvikvm(2263): GC_FOR_MALLOC freed 131 objects/1883016 bytes in 82ms 
W/System.err(2263): java.net.SocketException: Socket is closed 
W/System.err(2263): at org.apache.harmony.luni.net.PlainSocketImpl.getOutputStream(PlainSocketImpl.java:306) 
W/System.err(2263): at java.net.Socket.getOutputStream(Socket.java:515) 
W/System.err(2263): at com.iconnexus.client.AndroidClient.sendBytes(AndroidClient.java:379) 
W/System.err(2263): at com.iconnexus.client.AndroidClient$RepeatingTask.run(AndroidClient.java:499) 
W/System.err(2263): at java.util.Timer$TimerImpl.run(Timer.java:289) 
E/AndroidClient(2263): IN REPEATINGTHREAD-INPUTJSON3:{"from":"65.46.170.6:14842","type":11,"payload":{"message":""}} 
E/AndroidClient(2263): IN REPEATINGTHREAD-INPUTJSON 
E/AndroidClient(2263): IN REPEATINGTHREAD-INPUTJSON 
D/dalvikvm(2263): GC_FOR_MALLOC freed 131 objects/1883144 bytes in 116ms 
D/dalvikvm(2263): GC_FOR_MALLOC freed 42 objects/1252232 bytes in 95ms 
W/System.err(2263): java.net.SocketException: Socket is closed 
W/System.err(2263): at org.apache.harmony.luni.net.PlainSocketImpl.getOutputStream(PlainSocketImpl.java:306) 
W/System.err(2263): at java.net.Socket.getOutputStream(Socket.java:515) 
W/System.err(2263): at com.iconnexus.client.AndroidClient.sendBytes(AndroidClient.java:379) 
W/System.err(2263): at com.iconnexus.client.AndroidClient$RepeatingTask.run(AndroidClient.java:499) 
W/System.err(2263): at java.util.Timer$TimerImpl.run(Timer.java:289) 
E/AndroidClient(2263): IN REPEATINGTHREAD-INPUTJSON3: 
W/System.err(2263): java.net.SocketException: Socket is closed 
W/System.err(2263): at org.apache.harmony.luni.net.PlainSocketImpl.getOutputStream(PlainSocketImpl.java:306) 
W/System.err(2263): at java.net.Socket.getOutputStream(Socket.java:515) 
W/System.err(2263): at com.iconnexus.client.AndroidClient.sendBytes(AndroidClient.java:379) 
W/System.err(2263): at com.iconnexus.client.AndroidClient$RepeatingTask.run(AndroidClient.java:499) 
W/System.err(2263): at java.util.Timer$TimerImpl.run(Timer.java:289) 
E/AndroidClient(2263): IN REPEATINGTHREAD-INPUTJSON3: 
E/AndroidClient(2263): IN REPEATINGTHREAD-INPUTJSON 
D/dalvikvm(2263): GC_FOR_MALLOC freed 215 objects/2513520 bytes in 93ms 
W/System.err(2263): java.net.SocketException: Socket is closed 
W/System.err(2263): at org.apache.harmony.luni.net.PlainSocketImpl.getOutputStream(PlainSocketImpl.java:306) 
W/System.err(2263): at java.net.Socket.getOutputStream(Socket.java:515) 
W/System.err(2263): at com.iconnexus.client.AndroidClient.sendBytes(AndroidClient.java:379) 
W/System.err(2263): at com.iconnexus.client.AndroidClient$RepeatingTask.run(AndroidClient.java:499) 
W/System.err(2263): at java.util.Timer$TimerImpl.run(Timer.java:289) 
E/AndroidClient(2263): IN REPEATINGTHREAD-INPUTJSON3: 
E/AndroidClient(2263): IN REPEATINGTHREAD-INPUTJSON 
D/dalvikvm( 198): GC_EXTERNAL_ALLOC freed 3572 objects/355992 bytes in 102ms 
E/AndroidClient(2263): IN REPEATINGTHREAD-INPUTJSON 
D/dalvikvm(2263): GC_FOR_MALLOC freed 144 objects/1883560 bytes in 616ms 
E/AndroidClient(2263): IN REPEATINGTHREAD-INPUTJSON 
D/dalvikvm(2263): GC_FOR_MALLOC freed 26 objects/626264 bytes in 121ms 
I/ActivityManager( 110): Starting activity: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.iconnexus.client/.SplashScreen } 
D/dalvikvm(2263): GC_FOR_MALLOC freed 22 objects/1564120 bytes in 155ms 
W/System.err(2263): java.net.SocketException: Socket is closed 
W/System.err(2263): at org.apache.harmony.luni.net.PlainSocketImpl.getOutputStream(PlainSocketImpl.java:306) 
W/System.err(2263): at java.net.Socket.getOutputStream(Socket.java:515) 
W/System.err(2263): at com.iconnexus.client.AndroidClient.sendBytes(AndroidClient.java:379) 
W/System.err(2263): at com.iconnexus.client.AndroidClient$RepeatingTask.run(AndroidClient.java:499) 
W/System.err(2263): at java.util.Timer$TimerImpl.run(Timer.java:289) 
E/AndroidClient(2263): IN REPEATINGTHREAD-INPUTJSON3:{"from":"65.46.170.6:14842","type":11,"payload":{"message":""}} 
E/AndroidClient(2263): IN REPEATINGTHREAD-INPUTJSON 
D/dalvikvm(2263): GC_FOR_MALLOC freed 449 objects/3462208 bytes in 89ms 
W/System.err(2263): java.net.SocketException: Socket is closed 
W/System.err(2263): at org.apache.harmony.luni.net.PlainSocketImpl.getOutputStream(PlainSocketImpl.java:306) 
W/System.err(2263): at java.net.Socket.getOutputStream(Socket.java:515) 
W/System.err(2263): at com.iconnexus.client.AndroidClient.sendBytes(AndroidClient.java:379) 
W/System.err(2263): at com.iconnexus.client.AndroidClient$RepeatingTask.run(AndroidClient.java:499) 
W/System.err(2263): at java.util.Timer$TimerImpl.run(Timer.java:289) 
E/AndroidClient(2263): IN REPEATINGTHREAD-INPUTJSON3: 
E/AndroidClient(2263): IN REPEATINGTHREAD-INPUTJSON 
D/dalvikvm(2263): GC_FOR_MALLOC freed 131 objects/1883016 bytes in 195ms 
W/System.err(2263): java.net.SocketException: Socket is closed 
W/System.err(2263): at org.apache.harmony.luni.net.PlainSocketImpl.getOutputStream(PlainSocketImpl.java:306) 
W/System.err(2263): at java.net.Socket.getOutputStream(Socket.java:515) 
W/System.err(2263): at com.iconnexus.client.AndroidClient.sendBytes(AndroidClient.java:379) 
W/System.err(2263): at com.iconnexus.client.AndroidClient$RepeatingTask.run(AndroidClient.java:499) 
W/System.err(2263): at java.util.Timer$TimerImpl.run(Timer.java:289) 
E/AndroidClient(2263): IN REPEATINGTHREAD-INPUTJSON3: 
E/AndroidClient(2263): IN REPEATINGTHREAD-INPUTJSON 
I/ActivityManager( 110): Starting activity: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.iconnexus.client/.SplashScreen } 
D/dalvikvm(2263): GC_FOR_MALLOC freed 135 objects/1883144 bytes in 233ms 
W/System.err(2263): java.net.SocketException: Socket is closed 
W/System.err(2263): at org.apache.harmony.luni.net.PlainSocketImpl.getOutputStream(PlainSocketImpl.java:306) 
W/System.err(2263): at java.net.Socket.getOutputStream(Socket.java:515) 
W/System.err(2263): at com.iconnexus.client.AndroidClient.sendBytes(AndroidClient.java:379) 
W/System.err(2263): at com.iconnexus.client.AndroidClient$RepeatingTask.run(AndroidClient.java:499) 
W/System.err(2263): at java.util.Timer$TimerImpl.run(Timer.java:289) 
E/AndroidClient(2263): IN REPEATINGTHREAD-INPUTJSON3:{"from":"65.46.170.6:14842","type":11,"payload":{"message":""}} 

로그 캣 : PHONE1에서

로그 캣 : 여기에 무슨 일이 일어나고와의 SocketException에 대한 세부 정보를 shoew 무엇을 보여 두 logcats은 다음과 같습니다 :

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    Log.e(LOG_TAG, "Before OnCreate() Try"); 
    try { 
     Log.e(LOG_TAG, "In OnCreate() Try"); 
     socket = new Socket("23.23.175.213", 9000); 
     Log.e(LOG_TAG, "Created Socket"); 
     dataOutputStream = new DataOutputStream(socket.getOutputStream()); 
     Log.e(LOG_TAG, "Created DataOutputStream"); 
     dataInputStream = new DataInputStream(socket.getInputStream()); 
     Log.e(LOG_TAG, "Created DataInputStream"); 

     //out = new OutputStream(); 
     out = socket.getOutputStream(); 
     inputStr = socket.getInputStream(); 

     //Thread readjsonthrd = new Thread(new ReadJSONThread()); 
     //inputstrrd = new InputStreamReader(socket.getInputStream()); 

     p = new Profile(); 
     Log.e(LOG_TAG, "Created Profile Instance"); 

     //Gets the local profile via JSON and converts into Profile type 
     Gson gson = new Gson(); 
     Log.e(LOG_TAG, "Created Gson Instance" + "GetProfileJSONStr:" + p.getProfileJSONStr()); 
     p = gson.fromJson(p.getProfileJSONStr(), Profile.class); 
     setProfile(p); 
     Log.e(LOG_TAG, "Converted Profile to JSON"); 

     //Gson gson = new Gson(); 
     Log.e(LOG_TAG, "Before: outputJSON = gson.toJson(p);"); 
     outputJSON = gson.toJson(p).toString(); 
     outputJSON = removeExcessStr(outputJSON); 
     Log.e(LOG_TAG, "ProfilePicStr Base64:"+p.getProfilePicStr()); 

     outputJSON = outputJSON.replace("Name","name"); 
     outputJSON = outputJSON.replace("TagLine","message"); 
     outputJSON = outputJSON.replace("Title","title"); 
     outputJSON = outputJSON.replace("Company", "company"); 
     outputJSON = outputJSON.replace("Industry","industry"); 
     outputJSON = outputJSON.replace("WhatIDo","whatido"); 
     outputJSON = outputJSON.replace("WhoDoIWantToMeet","meetwho"); 
     outputJSON = outputJSON.replace("WHOOZNEAR_PROFILEPIC","photo"); 
     outputJSON = outputJSON.replaceAll("[c][o][n][t][e][n][t][:][/][/][a-zA-Z0-9]+[/][a-zA-Z0-9]+[/][a-zA-Z0-9]+[/][a-zA-Z0-9]+[/][a-zA-Z0-9]+", getPicBase64Str()); /*"helloworld2"*/ 

     if (!outputJSON.contains(",\"photo\":")) { 
      outputJSON = outputJSON.replace("}",",\"photo\":"+"\"IconnexUs\"}"); 
      outputJSON = outputJSON.replace("}",",\"photo\":"+"\""+getPicBase64Str()+"\"}"); 
      outputJSON = outputJSON.replace("}",",\"status\":\"enabled\"}"); 
     } 
     else { 
      outputJSON = outputJSON.replace("}",",\"status\":\"enabled\""); 
     } 

     outputJSONserv = "{\"to\":\"broadcast\",\"type\":\"1\",\"payload\":"+outputJSON+"}"; 

     Log.e(LOG_TAG, "Created outputJSON:" + outputJSON); 
     Log.e(LOG_TAG, "Created outputJSON Server:" + outputJSONserv); 
     JSONObject outObject = new JSONObject(); 
     try { 
      outObject.put("photo", "hello"); 
      outObject.put("type", "50"); 
      outObject.put("payload", outputJSON); 
      outputJSON = gson.toJson(outObject).toString(); 
     } catch (JSONException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     Log.e(LOG_TAG, "Value of PROFILEPIC STRING FROM PROFILEMAP: "+profileMap.get("WHOOZNEAR_PROFILEPIC")); 
     p.setProfilePicStr(ConvertandSetImagetoBase64(profileMap.get("WHOOZNEAR_PROFILEPIC"))); 
     //String headerJSON = gson.toJson(outObject).toString(); 
     outputJSON = outputJSON.substring(nthOccurrence(outputJSON, '{', 2)-1, nthOccurrence(outputJSON, '}', 1)-1); 

     String input = "["+"Ryan"+"["; 
     //"[foo".replaceAll(Pattern.quote("["), "\""); 
     String result = input.replaceAll(Pattern.quote("["), "\""); 
     Log.e(LOG_TAG, "REGEX REPLACEALL:"+result); 

     outputstrwr = new PrintWriter(new OutputStreamWriter(socket.getOutputStream()), true); 
     outputstrwr.write(outputJSONserv); 

     Log.e(LOG_TAG, "Base64 String:"+p.getProfilePicStr()); 
     Log.e(LOG_TAG, "Sent dataOutputStream"); 
    } catch (UnknownHostException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

    Log.e(LOG_TAG, "Before initEventHandlers"); 
    initEventHandlers(); 
    Log.e(LOG_TAG, "After initEventHandlers"); 
    //refreshViewModels(); 

    /*Log.e(LOG_TAG, "Start Repeat Thread"); 
    rt = new Thread(new RepeatingThread()); 
    //rt = new RepeatingThread(); 
    rt.start(); 
    Log.e(LOG_TAG, "Started Repeat Thread");*/ 

    Log.e(LOG_TAG, "Start Repeat Timer"); 
    TimerTask task = new RepeatingTask(); 
    Timer timer = new Timer(); 
    timer.scheduleAtFixedRate(task, 0, 3000); 
    Log.e(LOG_TAG, "Started Repeat Timer"); 
} 

내 타이머 작업 :

,691,363 (210)
public class RepeatingTask extends TimerTask { 
    //private int len = 0; 
    //private byte[] input = new byte[len]; 

    public RepeatingTask() { 
      Log.e(LOG_TAG, "In RepeatingTask()"); 
      Log.e(LOG_TAG, "Before inputJSON String"); 

      String hello = "hello world"; 
      //String inputJSON = getStringFromBuffer(new InputStreamReader(socket.getInputStream())); 
      try { 
       Log.e(LOG_TAG, "Hello String:"+inputStr); 
       inputJSON = ConvertByteArrayToString(getBytesFromInputStream(inputStr)); 
       Log.e(LOG_TAG, "Hello String2:"+inputJSON); 
       sendBytes(ConvertStringToByteArray(outputJSONserv), 0, ConvertStringToByteArray(outputJSONserv).length); 
       Log.e(LOG_TAG, "Hello String3:"+hello); 
      } catch (IOException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
      //Convert 
      Log.e(LOG_TAG, "After inputJSON String:" + inputJSON); 


     //LOOK HERE FIRST 
     //inputJSON is what is received back from the server - Take the inputJSON 
     //String and use regular expressions HERE to remove all the other characters in the 
     //string except the payload JSON. 
     //refreshViewModels(inputJSON); 
    } 

    @Override 
    public void run() { 
      /*try { 
       Log.e(LOG_TAG, "IN REPEATINGTHREAD-INPUTJSON"); 
       //outputstrwr.write(outputJSONserv); //UNCOMMENT IF NEED TO SEND DATA TO GET JSON BACK 
       //inputJSON = ConvertByteArrayToString(getBytesFromInputStream(inputStr)); 
       inputJSON = ConvertByteArrayToString(getFileBytes(inputStr)); 
      } catch (IOException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 

      Log.e(LOG_TAG, "IN REPEATINGTHREAD-INPUTJSON2:" + inputJSON); 
      refreshViewModels(inputJSON);*/ 

     try { 
      Log.e(LOG_TAG, "IN REPEATINGTHREAD-INPUTJSON"); 
      //outputstrwr.write(outputJSONserv); //UNCOMMENT IF NEED TO SEND DATA TO GET JSON BACK 
      //byte[] = myByteArray = readBytes(inputStr); 
      sendBytes(ConvertStringToByteArray(outputJSONserv), 0, ConvertStringToByteArray(outputJSONserv).length); 
      //sendBytes(myByteArray, 0, myByteArray.length); 
      Log.e(LOG_TAG, "AFTER SENDING DATA"); 
      //inputJSON = ConvertByteArrayToString(getBytesFromInputStream(inputStr)); 
       inputJSON = ConvertByteArrayToString(getBytesFromInputStream(inputStr)); 
       Log.e(LOG_TAG, "IN REPEATINGTHREAD-INPUTJSON2:" + inputJSON); 
     } 
     catch (IOException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
     } 

     Log.e(LOG_TAG, "IN REPEATINGTHREAD-INPUTJSON3:" + inputJSON); 
     refreshViewModels(inputJSON); //UNCOMMENT THIS AFTER I GET IT WORKING 
    } 
} 

refreshViewModels() 메소드 :

여기
public void refreshViewModels(String inputJSON) { 

     try { 
      ListView servicesListView = (ListView) this 
        .findViewById(R.id.profilesListView); 

      String[] from = new String[] { "profilePic", "neighborName", 
        "tagLine" }; 
      int[] to = new int[] { R.id.avatar, R.id.username, R.id.email }; 

      // prepare the list of all records 
      List<HashMap<String, Object>> fillMaps = new ArrayList<HashMap<String, Object>>(); 
      List<Profile> profiles = new ArrayList<Profile>(); 

      // Clear the position mapping list and reset it 
      this.posMap.clear(); 
      Log.i(LOG_TAG, "NEW inputJSON: " + inputJSON); 
      inputJSON = getPayloadStr(inputJSON); 
      Log.i(LOG_TAG, "NEW inputJSON2: " + inputJSON); 
      JSONArray profileArray = new JSONArray(inputJSON); 

      for (int i=0; i<profileArray.length(); i++) { 
       JSONObject jsonObject = profileArray.getJSONObject(i); 
       Gson gson = new Gson(); 
       Profile p = gson.fromJson(gson.toJson(jsonObject).toString(), Profile.class); 
       profiles.add(p); 
      } 

      int pos = 0; 

      // Creates the fillMaps list for the listAdapter 
      Log.i(LOG_TAG, "Profiles size: " + profiles.size()); 
      //showToast("Profiles size: " + profiles.size()); 
      for (Profile p : profiles) { 
       // Create mapping for list adapter 
       HashMap<String, Object> map = new HashMap<String, Object>(); 
       map.put("profilePic", 
         p.getAttributeValue("photo")== null? "Not Set" : p 
           .getAttributeValue("photo")); 
       map.put("neighborName", 
         p.getAttributeValue("Name") == null? "Not Set" : p 
           .getAttributeValue("Name")); 
       map.put("tagLine", 
         p.getAttributeValue("TagLine") == null? "Not Set" : p 
           .getAttributeValue("TagLine")); 
       fillMaps.add(map); 

       // Reset the postion mapping 
       this.posMap.put(pos++, p); 

      } 

      ListAdapter servicesListAdapter = new myAdapter(this, fillMaps, 
        R.layout.listitem, from, to); 
      servicesListView.setAdapter(servicesListAdapter); 

     } catch (Exception e) { 
      Log.e(LOG_TAG, "Error making list adapter: " + e.getMessage()); 
     } 

    } 

내 변환 방법은 다음과 같습니다

다음
public String ConvertByteArrayToString(byte[] b) { 
    // byte[] to string 
    String input = new String(b); 
    return input; 
} 

public byte[] ConvertStringToByteArray(String str) { 
    // string to byte[] 
    byte[] bytes = str.getBytes(); 
    return bytes; 
} 

내가 JSON 문자열을주고받을 사용하고 방법은 다음과 같습니다

public void sendBytes(byte[] myByteArray, int start, int len) throws IOException { 
    if (len < 0) 
     throw new IllegalArgumentException("Negative length not allowed"); 
    if (start < 0 || start >= myByteArray.length) 
     throw new IndexOutOfBoundsException("Out of bounds: " + start); 
    // Other checks if needed. 

    // May be better to save the streams in the support class; 
    // just like the socket variable. 

    OutputStream out = socket.getOutputStream(); 
    DataOutputStream dos = new DataOutputStream(out); 

    dos.writeInt(len); 
    if (len > 0) { 
     dos.write(myByteArray, start, len); 
    } 

    //OutputStream out = socket.getOutputStream(); //COMMENTED THIS OUT 

    //DataOutputStream dos = new DataOutputStream(out); //COMMENTED THIS OUT 

    /*dataOutputStream.writeInt(len); //COMMENTED THIS OUT 
    if (len > 0) { 
     dataOutputStream.write(myByteArray, start, len); 
    }*/ 
} 

public static byte[] getBytesFromInputStream(InputStream is) throws IOException { 
     // Get the size of the file 
     int length = is.available(); 

     if (length > Integer.MAX_VALUE) { 
     // File is too large 
     } 

     // Create the byte array to hold the data 
     byte[] bytes = new byte[(int) length]; 

     // Read in the bytes 
     int offset = 0; 
     int numRead = 0; 
     while (offset < bytes.length 
     && (numRead = is.read(bytes, offset, bytes.length - offset)) >= 0) { 
     offset += numRead; 
     } 
     // Ensure all the bytes have been read in 
     if (offset < bytes.length) { 
     throw new IOException("Could not completely stream "); 
     } 
     // Close the input stream and return bytes 
     is.close(); 
     return bytes; 
} 

도움말 또는 올바른 방향으로 포인터를 주시면 감사하겠습니다. 채팅을 통한 도움도 크게 감사하겠습니다. 필요한 경우 전체 파일을 채팅 세션에 게시하거나 볼 수 있습니다.

답변

0

SocketException: socket is closed 소켓을 닫은 다음 계속 사용함을 의미합니다. 코드의 버그입니다. 스트림 중 하나를 닫고 다른 스트림을 여전히 사용하려고 시도하고 있습니다. 두 스트림 중 하나를 닫으면 다른 스트림과 소켓이 닫힙니다.

또한 available()를 오용하고 있습니다. Javadoc을 참조하십시오. Javadoc에서 유효하지 않은 것으로 명시되어있는 용도로 사용하지 않습니다.

+0

available()을 어떻게 사용 하시겠습니까? 입력 스트림의 크기는 어떻게해야합니까? – user268397

+0

@ user268397 available()을 전혀 사용하지 않는 것이 좋습니다. 그것의 정확한 사용법은 거의 없으며, 이것도 그 중 하나가 아닙니다. '입력 스트림의 크기'와 같은 것은 존재하지 않습니다. 당신은 영원히 계속해서 쓸 수 있습니다. * message * 크기를 알아야 할 경우, (a) 길이 단어 접두어를 보내십시오. (b) 모호함을 일으키지 않는 (즉, 분리 문자가 데이터에 나타날 수없는 경우), 또는 (c) XML, Java Object Serialization과 같은 자체 기술 프로토콜을 사용하는 경우, 개행 문자와 같은 고유 한 후행 분리 문자를 전송하십시오. JSON 등 – EJP

+0

나는 실제로 그것을 지금 사용하지 않을 것이다. 나는 그것을 알아. 조언 해 주셔서 감사합니다! – user268397

관련 문제