2017-11-30 1 views
1

JSON 객체를 받고 해당 내용을 ArrayList에 넣으려고합니다. 우리가 설정 한 PHP 서버는 앱이 서버에 접속하고 있지만 아무 것도 보내지지 않고 있음을 보여줍니다. 치명적인 오류는 발생하지 않지만 Socket Error : Permission Denied가 표시됩니다.JSON을 통해 Android 서버를 PHP 서버에 연결 : 소켓 예외

public class receiveData { 
 
    int moisture = LocalStorage.moisture; 
 
    User user; 
 

 
    ArrayList<Plant> receivedPlants = new ArrayList<Plant>(); 
 

 
    URL url = new URL("http://192.168.0.14/steve.php"); 
 

 
    URLConnection urlConnection = (HttpURLConnection) url.openConnection(); 
 

 
    public receiveData() throws IOException { 
 
    } 
 

 

 
    public ArrayList<Plant> receivePlantList() { 
 
     // HTTP request 
 
     urlConnection.setDoOutput(true); 
 

 
     try { 
 
      urlConnection.getContent(); 
 
     } catch (IOException e) { 
 
      e.printStackTrace(); 
 
     } 
 

 
     // Get items from JSON object and place in a plant list 
 
     BufferedReader reader = null; 
 
     try { 
 
      InputStream stream = urlConnection.getInputStream(); 
 
      reader = new BufferedReader(new InputStreamReader(stream)); 
 
      JsonReader jReader = new JsonReader(reader); 
 

 
      jReader.beginObject(); 
 
      while (jReader.hasNext()) { 
 
       jReader.nextName(); 
 
       int plantMoisture = jReader.nextInt(); 
 
       String plantName = jReader.nextString(); 
 
       Plant currentPlant = new Plant(plantName, plantMoisture); 
 
       receivedPlants.add(currentPlant); 
 
      } 
 
      jReader.endObject(); 
 
      reader.close(); 
 
      stream.close(); 
 
     } catch (IOException e) { 
 
      e.printStackTrace(); 
 
     } 
 
     //jReader.close(); 
 
     return receivedPlants; 
 
    }

을하고 여기에 내 안드로이드 매니페스트 : 내가 데이터를 수신하기 위해 호출 할 경우 다음

D/NetworkSecurityConfig: No Network Security Config specified, using platform default 
 
I/System.out: (HTTPLog)-Static: isSBSettingEnabled false 
 
I/System.out: (HTTPLog)-Static: isSBSettingEnabled false 
 
W/System.err: java.net.SocketException: Permission denied 
 
W/System.err:  at java.net.Socket.createImpl(Socket.java:454) 
 
W/System.err:  at java.net.Socket.getImpl(Socket.java:517) 
 
W/System.err:  at java.net.Socket.setSoTimeout(Socket.java:1108) 
 
W/System.err:  at com.android.okhttp.Connection.connectSocket(Connection.java:1454) 
 
W/System.err:  at com.android.okhttp.Connection.connect(Connection.java:1413) 
 
W/System.err:  at com.android.okhttp.Connection.connectAndSetOwner(Connection.java:1707) 
 
W/System.err:  at com.android.okhttp.OkHttpClient$1.connectAndSetOwner(OkHttpClient.java:133) 
 
W/System.err:  at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:466) 
 
W/System.err:  at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:371) 
 
W/System.err:  at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:503) 
 
W/System.err:  at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:438) 
 
W/System.err:  at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:247) 
 
W/System.err:  at java.net.URLConnection.getContent(URLConnection.java:737) 
 
W/System.err:  at com.example.steve.plantpals.receiveData.receivePlantList(receiveData.java:41) 
 
W/System.err:  at com.example.steve.plantpals.UserActivity$1.onClick(UserActivity.java:38) 
 
W/System.err:  at android.view.View.performClick(View.java:6205) 
 
W/System.err:  at android.widget.TextView.performClick(TextView.java:11103) 
 
W/System.err:  at android.view.View$PerformClick.run(View.java:23653) 
 
W/System.err:  at android.os.Handler.handleCallback(Handler.java:751) 
 
W/System.err:  at android.os.Handler.dispatchMessage(Handler.java:95) 
 
W/System.err:  at android.os.Looper.loop(Looper.java:154) 
 
W/System.err:  at android.app.ActivityThread.main(ActivityThread.java:6682) 
 
W/System.err:  at java.lang.reflect.Method.invoke(Native Method) 
 
W/System.err:  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1520) 
 
W/System.err:  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1410) 
 
W/System.err: java.net.SocketException: Permission denied 
 
W/System.err:  at java.net.Socket.createImpl(Socket.java:454) 
 
W/System.err:  at java.net.Socket.getImpl(Socket.java:517) 
 
W/System.err:  at java.net.Socket.setSoTimeout(Socket.java:1108) 
 
W/System.err:  at com.android.okhttp.Connection.connectSocket(Connection.java:1454) 
 
W/System.err:  at com.android.okhttp.Connection.connect(Connection.java:1413) 
 
W/System.err:  at com.android.okhttp.Connection.connectAndSetOwner(Connection.java:1707) 
 
W/System.err:  at com.android.okhttp.OkHttpClient$1.connectAndSetOwner(OkHttpClient.java:133) 
 
W/System.err:  at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:466) 
 
W/System.err:  at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:371) 
 
W/System.err:  at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:503) 
 
W/System.err:  at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:438) 
 
W/System.err:  at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:247) 
 
W/System.err:  at java.net.URLConnection.getContent(URLConnection.java:737) 
 
W/System.err:  at com.example.steve.plantpals.receiveData.receivePlantList(receiveData.java:41) 
 
W/System.err:  at com.example.steve.plantpals.UserActivity$1.onClick(UserActivity.java:38) 
 
W/System.err:  at android.view.View.performClick(View.java:6205) 
 
W/System.err:  at android.widget.TextView.performClick(TextView.java:11103) 
 
W/System.err:  at android.view.View$PerformClick.run(View.java:23653) 
 
W/System.err:  at android.os.Handler.handleCallback(Handler.java:751) 
 
W/System.err:  at android.os.Handler.dispatchMessage(Handler.java:95) 
 
W/System.err:  at android.os.Looper.loop(Looper.java:154) 
 
W/System.err:  at android.app.ActivityThread.main(ActivityThread.java:6682) 
 
W/System.err:  at java.lang.reflect.Method.invoke(Native Method) 
 
W/System.err:  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1520) 
 
W/System.err:  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1410)

입니다

,462,

이것은 네트워킹을 필요로하는 내 첫 번째 프로젝트, 나의 첫번째 유래의 질문이 불분명 한 경우 정말 미안.

+0

매니페스트에 추가 된 인터넷 권한은? –

+0

내 대답을 확인하십시오. – diegoveloper

답변

0
당신은 당신의 응용 프로그램 태그 외부에서 권한을 선언해야

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> 
    <uses-permission android:name="android.permission.INTERNET" /> 

    <application 
    android:allowBackup="true" 
    android:icon="@mipmap/ic_launcher" 
    android:label="@string/app_name" 
    android:supportsRtl="true" 
    android:theme="@style/AppTheme"> 
    ... 
+0

고맙습니다. 이전에 시도했지만 다른 오류가 발생했습니다. 다시 그 오류를 받고 있어요 : E/AndroidRuntime : 치명적인 예외를 : 주요 프로세스 : com.example.steve.plantpals, PID : 31260 android.os.NetworkOnMainThreadException을 –

+0

당신이하고 있기 때문에 예 이것은 또 다른 오류가있다 메인 쓰레드에서 long 연산을 사용하려면 AsyncTask, Threads, Loaders 등과 같은 배경 스레드를 사용해야한다. 하지만 당신이 질문에 설명하는 문제는 내 해결책으로 해결됩니다. 그래서 이것을 대답으로 표시하고 다른 질문을 쓸 수 있습니다. :) – diegoveloper

+0

좋습니다, 정말 고마워요! –