인터넷을 통해 여러 시간 동안 검색 한 결과 this as answer입니다. 그러나, 내 코드에서 이것을 어디에서 사용해야하는지 모른다. 하지에 무선 모바일 데이터를 사용하는 경우오류 java.net.ConnectException : 24000ms 후 연결 실패 : ECONNREFUSED (연결이 거부 됨)
I 타임 아웃을 증가하려고public final static int GET=1;
public final static int POST=2;
public final static int PUT=3;
public final static int DELETE=4;
public final static String TAG="JSONParser";
Context context;
public JSONParser(Context context){
super();
this.context=context;
//this.deviceId = Utility.getDeviceId(this.context);
}
public String getResponseString(String url,int method,String basicAuth){
return makeServiceCall(url,method,null,basicAuth);
}
public String getResponseString(String url, int method, ContentValues params, String basicAuth){
return makeServiceCall(url,method,params,basicAuth);
}
public JSONObject getJSONFromUrl(String url, int method, String basicAuth){
return getJSONFromUrl(url,method,null,basicAuth);
}
public JSONObject getJSONFromUrl(String url, int method, ContentValues params, String basicAuth){
Log.e(TAG, "getJSONFromUrl: ");
JSONObject json=null;
try{
String jsonString=makeServiceCall(url,method,params,basicAuth);
if(jsonString!=null){
json=new JSONObject(jsonString);
}
return json;
}catch (JSONException e){
Log.e(TAG, "Error parsing data "+e.toString());
return json;
}
}
public JSONArray getJSONArrayFromUrl(String url, int method, String basicAuth){
return getJSONArrayFromUrl(url,method,null,basicAuth);
}
public JSONArray getJSONArrayFromUrl(String url, int method, ContentValues params, String basicAuth){
Log.e(TAG, "getJSONArrayFromUrl");
JSONArray jsonArray=null;
try{
String jsonString=makeServiceCall(url,method,params,basicAuth);
if(jsonString!=null){
Log.e("jsonString",jsonString);
jsonArray=new JSONArray(jsonString);
}
return jsonArray;
}catch (JSONException e){
Log.e(TAG, "Error parsing data "+e.toString());
return jsonArray;
}
}
private String makeServiceCall(String address, int method,ContentValues params, String basicAuth) {
Log.e(TAG, "makeServiceCall");
String result = null;
URL url = null;
HttpURLConnection urlConnection = null;
OutputStream out;
InputStream in;
try {
address = URLDecoder.decode(address, "UTF-8");
Log.e(TAG, "makeServiceCall: Url: " + address);
} catch (Exception e) {
}
try {
url = new URL(address);
urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setConnectTimeout(24000);
urlConnection.setReadTimeout(24000);
urlConnection.setAllowUserInteraction(false);
urlConnection.setInstanceFollowRedirects(true);
if (method == POST) {
urlConnection.setRequestMethod("POST");
urlConnection.setDoOutput(true);
urlConnection.setDoInput(true);
} else if (method == GET) {
urlConnection.setRequestMethod("GET");
} else if (method == PUT) {
urlConnection.setRequestMethod("PUT");
urlConnection.setDoOutput(true);
} else if (method == DELETE) {
urlConnection.setRequestMethod("DELETE");
urlConnection.setDoOutput(true);
}
//urlConnection.setRequestProperty("Content-Type","application/x-www-from-urlencoded");
//urlConnection.setRequestProperty("Content-Type","application/from-data");
//urlConnection.setRequestProperty("charset","utf-8");
urlConnection.setRequestProperty("Accept", "application/json");
//urlConnection.setRequestProperty("Accept","text/html");
if (basicAuth != null && basicAuth.length() > 0) {
urlConnection.setRequestProperty("Authorization", basicAuth);
}
if (method != GET) {
if (params != null) {
StringBuilder postData = new StringBuilder();
for (String key : params.keySet()) {
if (postData.length() != 0) postData.append('&');
postData.append(URLEncoder.encode(key, "UTF-8"));
postData.append('=');
postData.append(URLEncoder.encode(String.valueOf(params.get(key)), "UTF-8"));
}
byte[] outData = postData.toString().getBytes("UTF-8");
urlConnection.setRequestProperty("Content-Length", Integer.toString(outData.length));
out = new BufferedOutputStream(urlConnection.getOutputStream());
out.write(outData);
out.close();
}
}
urlConnection.connect();
in = new BufferedInputStream(urlConnection.getInputStream());
result = inputStreamToString(in);
Log.e(TAG, "ServerResponse" + result);
} catch (Exception e) {
Log.e("makeServiceCall: ", "Error" + e.toString());
Toast.makeText(context,context.getResources().getString(R.string.please_try_later),Toast.LENGTH_SHORT).show();
} finally {
if (urlConnection != null) {
urlConnection.disconnect();
}
}
return result;
}
/*
private HttpClient createHttpClientWithDefaultSocketFactory(Object o, Object o1) {
}
*/
private static String inputStreamToString(InputStream in) {
String result="";
if(in==null){
return result;
}
try{
BufferedReader reader=new BufferedReader(new InputStreamReader(in,"UTF-8"));
StringBuilder out=new StringBuilder();
String line;
while((line=reader.readLine())!=null){
out.append(line);
}
result=out.toString();
reader.close();
return result;
}catch(Exception e){
Log.e("inputStreamToString: ","Error"+e.toString());
return result;
}
}
는,이 문제가 보여진다. 어떤 도움도 정말 고맙겠습니다 ..
Wi-Fi를 사용하지만 모바일 데이터가 아닌 경우 로컬 주소에 연결하려고합니까? 그건 그렇고, 당신이 찾은 대답은 단지 몇 번 다시 연결을 제안, 그래서 당신은 단지 for 루프를 구현해야합니다. – Tyrmos
ERCONNREFUSED는 서버의 포트가 연결을 거부 함을 의미합니다. 어쩌면 속도가 제한되어 연결을 끊을 수 있습니까? – GregP
@Tyrmos 예, for-loop를 구현 했었지만 돌발했습니다. –