2017-11-30 13 views
1

JSONオブジェクトを受け取り、その内容をArrayListに配置しようとしています。設定したPHPサーバーは、アプリケーションがサーバーに接続していることを示していますが、何も返されません。 致命的なエラーは発生しませんが、ソケットエラー:パーミッションが拒否されています。AndroidアプリケーションをJSON経由でPHPサーバーに接続する:ソケット例外

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)

私がデータを受信するために呼び出すのはここです:

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; 
 
    }

、ここでは私のAndroidのマニフェストです:

<?xml version="1.0" encoding="utf-8"?> 
 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
 
    package="com.example.steve.plantpals"> 
 

 

 
    <application 
 
     android:allowBackup="true" 
 
     android:icon="@mipmap/ic_launcher" 
 
     android:label="@string/app_name" 
 
     android:supportsRtl="true" 
 
     android:theme="@style/AppTheme"> 
 
     <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> 
 
     <uses-permission android:name="android.permission.INTERNET" /> 
 

 
     <activity 
 
      android:name=".MainActivity" 
 
      android:label="@string/app_name" 
 
      android:theme="@style/AppTheme.NoActionBar"> 
 
      <intent-filter> 
 
       <action android:name="android.intent.action.MAIN" /> 
 

 
       <category android:name="android.intent.category.LAUNCHER" /> 
 
      </intent-filter> 
 
     </activity> 
 
     <activity 
 
      android:name=".MyPlants" 
 
      android:label="@string/title_activity_my_plants" 
 
      android:theme="@style/AppTheme.NoActionBar" /> 
 
     <activity android:name=".AddPlant" /> 
 
     <activity android:name=".testMoistureHigh" /> 
 
     <activity android:name=".testMoistureLow" /> 
 
     <activity android:name=".testMoistureOptimal" /> 
 
     <activity 
 
      android:name=".SettingsActivity" 
 
      android:label="@string/title_activity_settings" /> 
 
     <activity android:name=".UserActivity"></activity> 
 
    </application> 
 

 
</manifest>

これは、これが不明である場合にはとても残念なネットワークを必要とする私の最初のプロジェクト、そして私の最初のstackoverflowの質問です。

+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

あなたがやっているので、はい、これは、別のエラーですメインスレッドで長い操作をするには、AsyncTask、Threads、Loadersなどのバックグラウンドスレッドを使用する必要があります。あなたが質問で説明する問題は私の解決策で解決されるので、これを受け入れられた答えとしてマークして別の質問を書くことができます。 :) – diegoveloper

+0

さて、ありがとう! –

関連する問題