스마트기기개발관련/안드로이드 개발

android 안드로이드 개발 HttpURLConnection connect 에러 관련 StrictMode

AlrepondTech 2020. 9. 22. 20:05
반응형

 

 

 

=================================

=================================

=================================

 

 

 

 

 

 

 

 

아래 링크와 같이 설정을 해주면 된다.

StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); StrictMode.setThreadPolicy(policy);

 

 

=================================

=================================

=================================

 

 

출처: http://stackoverflow.com/questions/16128132/program-crashing-at-connect-on-android-not-connecting

program crashing at .connect() on Android, not connecting

I been trying to figure this out for hours now. I've searched for answers, but I can't find an answer. I have never bothered to ask before and this is the first time I'm asking a question. Basically what I am doing is breaking up my coding for organization purposes. The following snippet works just fine, but when I take it and place it into another class the urlConnect(); connects just fine. I've marked it below

public String downloadUrl(String strUrl) throws IOException{
    String data = "";
    InputStream iStream = null;
    HttpURLConnection urlConnection = null;

    try{
        URL url = new URL(strUrl);
        String line = "";

        // Creating an http connection to communicate with url 
        urlConnection = (HttpURLConnection) url.openConnection();

        /* Connecting to url */
        urlConnection.connect(); <-------------------------works in this snippet

        /* Reading data from url */
        iStream = urlConnection.getInputStream();
        BufferedReader br = new BufferedReader(new InputStreamReader(iStream));
        StringBuffer sb  = new StringBuffer();

        while((line = br.readLine()) != null){
            sb.append(line);
        }
        data = sb.toString();
        br.close();
    }
    catch(Exception e){
        Log.d("Exception while downloading url", e.toString());
    }
    finally {
        iStream.close();
        urlConnection.disconnect();
    }
    return data;
}

So this following snippet, is pretty much identical. But for some reason it doesn't want to connect:

public String getJSONobject(String strUrl) throws IOException{
    String data = "";
    InputStream iStream = null;
    HttpURLConnection urlConnection = null;

    try{
        URL url = new URL(strUrl);
        String line = "";
        urlConnection = (HttpURLConnection) url.openConnection();
        urlConnection.connect();    <------------------ Does not work

        iStream = urlConnection.getInputStream();
        BufferedReader br = new BufferedReader(new InputStreamReader(iStream));
        StringBuffer sb  = new StringBuffer();

        while((line = br.readLine()) != null){
            sb.append(line);
        }
        data = sb.toString();
        br.close();
        iStream.close();    
    }               
    catch (MalformedURLException e1) {
        e1.printStackTrace();
    } 
    catch (IOException e1) {
        e1.printStackTrace();
    } 
    finally {
        if(null != urlConnection) { urlConnection.disconnect(); 
    }
    return data;

 

 

 

반응형

 

728x90

 

 

 

The LogCat:

>at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1131)
>at java.net.InetAddress.lookupHostByName(InetAddress.java:385)
>at java.net.InetAddress.getAllByNameImpl(InetAddress.java:236)
>at java.net.InetAddress.getAllByName(InetAddress.java:214)
>at libcore.net.http.HttpConnection.<init>(HttpConnection.java:70)
>at libcore.net.http.HttpConnection.<init>(HttpConnection.java:50)
>at libcore.net.http.HttpConnection$Address.connect(HttpConnection.java:340)
>at libcore.net.http.HttpConnectionPool.get(HttpConnectionPool.java:87)
>at libcore.net.http.HttpConnection.connect(HttpConnection.java:128)
>at libcore.net.http.HttpEngine.openSocketConnection(HttpEngine.java:315)
>at libcore.net.http.HttpsURLConnectionImpl$HttpsEngine.makeSslConnection(HttpsURLConnectionImpl.java:461)
>at libcore.net.http.HttpsURLConnectionImpl$HttpsEngine.connect(HttpsURLConnectionImpl.java:433)
>at libcore.net.http.HttpEngine.sendSocketRequest(HttpEngine.java:289)
>at libcore.net.http.HttpEngine.sendRequest(HttpEngine.java:239)
>at libcore.net.http.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:80)
>at libcore.net.http.HttpsURLConnectionImpl.connect(HttpsURLConnectionImpl.java:165)
>at com.navsquad.shsu.katlas2.RouteJSONobject.getJSONobject(RouteJSONobject.java:57)
>at com.navsquad.shsu.katlas2.CreateRoute.create(CreateRoute.java:41)
>at com.navsquad.shsu.katlas2.MainActivity$3.onMapClick(MainActivity.java:84)
>at com.google.android.gms.maps.GoogleMap$6.onMapClick(Unknown Source)
>at com.google.android.gms.internal.t$a.onTransact(Unknown Source)
>at android.os.Binder.transact(Binder.java:326)
>at com.google.android.gms.maps.internal.IOnMapClickListener$Stub$Proxy.onMapClick(IOnMapClickListener.java:93)
>at maps.i.s.b(Unknown Source)
>at maps.y.v.c(Unknown Source)
>at maps.y.bf.onSingleTapConfirmed(Unknown Source)
>at maps.d.v.onSingleTapConfirmed(Unknown Source)
>at maps.d.j.handleMessage(Unknown Source)
>at android.os.Handler.dispatchMessage(Handler.java:99)
>at android.os.Looper.loop(Looper.java:137)
>at android.app.ActivityThread.main(ActivityThread.java:5059)
>at java.lang.reflect.Method.invokeNative(Native Method)
>at java.lang.reflect.Method.invoke(Method.java:511)
>at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:792)
>at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:555)
>at dalvik.system.NativeStart.main(Native Method)

So again to make it clear, all I was doing was making a separate class for my own organization. Originally I had a parser included in, but I have now split it up into different classes, so I can use other parsers with the string/JSON Object. If you could help me figure out what is different from before, I would appreciate. Original class was in an implemented AsyncTask Class.

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

I don't understand why it is that Google works much better for me than for some many other people. When I search for this exception, I get thousands of results. The top three all have the solution offered by Vipul. The quality of SO has fallen a lot recently. I estimate about 60% of all questions on here are answered with a simple search. Signal to noise ratio is very poor.

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

possible duplicate of android.os.NetworkOnMainThreadException

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Sir, I've spent hours searching and testing everything I've found on the subject. Yet I get the same results every time. I've use stackoverflow for a very long time and never had to ask my own questions. I've even found that same thread, and that did not answer my problem. I did not get on here to get insulted. If that is what you need to do, fine do so

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1131)

It seems you've attempted to invoke blocking network api's on the UI thread of your application.

In Android 3.0 and above version there is a new application policy that don't allows the execution of networking calls on the main thread.

Please go through http://developer.android.com/reference/android/os/StrictMode.html.

You can disable strictmode by putting following folling snippet.(I would not recommed this approach in production environment.)

StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

So to use the HttpConnect, do I have to use it in a separate thread? Just like how the AsyncTask is used? This would make sense with that first line of the logcat. I'm not too keen on disabling strictmode. –  NERDx Apr 21 '13 at 5:21
  @NERDx Its MUST you should create separate thread to perform network operations.Remember to update UI only from main thread. –  Vipul Shah Apr 21 '13 at 5:26
  Thank you for your input. That is really all I needed to know. I've only started on Android 2 weeks ago. Now it's time to learn how to play with threads a litte better in 2 days haha. –  NERDx Apr 21 '13 at 5:36
  @NERDx All the best for the adventures :)

 

=================================

=================================

=================================

 

 

반응형