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;
}
은
도움말 또는 올바른 방향으로 포인터를 주시면 감사하겠습니다. 채팅을 통한 도움도 크게 감사하겠습니다. 필요한 경우 전체 파일을 채팅 세션에 게시하거나 볼 수 있습니다.
available()을 어떻게 사용 하시겠습니까? 입력 스트림의 크기는 어떻게해야합니까? – user268397
@ user268397 available()을 전혀 사용하지 않는 것이 좋습니다. 그것의 정확한 사용법은 거의 없으며, 이것도 그 중 하나가 아닙니다. '입력 스트림의 크기'와 같은 것은 존재하지 않습니다. 당신은 영원히 계속해서 쓸 수 있습니다. * message * 크기를 알아야 할 경우, (a) 길이 단어 접두어를 보내십시오. (b) 모호함을 일으키지 않는 (즉, 분리 문자가 데이터에 나타날 수없는 경우), 또는 (c) XML, Java Object Serialization과 같은 자체 기술 프로토콜을 사용하는 경우, 개행 문자와 같은 고유 한 후행 분리 문자를 전송하십시오. JSON 등 – EJP
나는 실제로 그것을 지금 사용하지 않을 것이다. 나는 그것을 알아. 조언 해 주셔서 감사합니다! – user268397