2016-08-22 6 views
0

TCPを使用してPC上のPythonサーバーに文字列を送信するために、Javaで単純なアンドロイドクライアントを作成しようとしています。しかし、私はこのエラーメッセージが表示され続けます。それは私のアプリケーションを実行することができますが、文字列を送信しようとするとクラッシュします。私はAndroid Studio 2.1.2を使用しています。物理的なアンドロイドデバイスでテストを実行しています。ここでは、コードは(終わったが、すでに文字列を送信する必要がありません)です。AndroidManifest.xml 'package.name.Activity'は 'android.app.Activity'に割り当てられません

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="brea.breverser"> 
    <uses-permission android:name="android.permission.INTERNET" /> 
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> 

    <application 
     android:allowBackup="true" 
     android:icon="@mipmap/ic_launcher" 
     android:label="@string/app_name" 
     android:supportsRtl="true" 
     android:theme="@style/AppTheme"> 
     <activity android:name=".RequestToServer"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
    </application> 

</manifest> 

次の例外発生します:

'brea.breverser.RequestToServer' is not assignable to 'android.app.Activity' (at line 14) 

をそして、ここでlogcatだ

package brea.breverser; 

import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.View; 

import java.io.DataOutputStream; 
import java.io.IOException; 
import java.io.OutputStreamWriter; 
import java.io.PrintWriter; 
import java.net.Socket; 
import java.net.UnknownHostException; 

public class RequestToServer extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_request_to_server); 
     //Connect(); 

    } 

    public void sendPlay(View view) { 
     try { 
      Socket s = new Socket("192.168.1.35", 5000); 
      DataOutputStream output = new DataOutputStream(s.getOutputStream()); 
      output.writeUTF("HELLO_WORLD"); 
      output.close(); 
      s.close(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
} 

ここのAndroidManifest.xmlです:

08-23 00:17:32.661 29558-29558/brea.breverser W/ActivityThread: Application brea.breverser can be debugged on port 8100... 
08-23 00:17:32.681 29558-29558/brea.breverser W/System: ClassLoader referenced unknown path: /data/app/brea.breverser-2/lib/arm 
08-23 00:17:33.942 29558-29558/brea.breverser W/System: ClassLoader referenced unknown path: /data/app/brea.breverser-2/lib/arm 
08-23 00:17:34.257 29558-29558/brea.breverser W/art: Before Android 4.1, method android.graphics.PorterDuffColorFilter android.support.graphics.drawable.VectorDrawableCompat.updateTintFilter(android.graphics.PorterDuffColorFilter, android.content.res.ColorStateList, android.graphics.PorterDuff$Mode) would have incorrectly overridden the package-private method in android.graphics.drawable.Drawable 
08-23 00:17:34.393 29558-29636/brea.breverser D/OpenGLRenderer: Use EGL_SWAP_BEHAVIOR_PRESERVED: true 
08-23 00:17:34.458 29558-29636/brea.breverser I/Adreno-EGL: <qeglDrvAPI_eglInitialize:379>: QUALCOMM Build: 10/09/15, 6cbbf7d, I3193f6e94a 
08-23 00:17:34.461 29558-29636/brea.breverser I/OpenGLRenderer: Initialized EGL, version 1.4 
08-23 00:17:36.937 29558-29558/brea.breverser D/AndroidRuntime: Shutting down VM 
08-23 00:17:36.960 29558-29558/brea.breverser E/AndroidRuntime: FATAL EXCEPTION: main 
                   Process: brea.breverser, PID: 29558 
                   java.lang.IllegalStateException: Could not execute method for android:onClick 
                    at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:293) 
                    at android.view.View.performClick(View.java:5201) 
                    at android.view.View$PerformClick.run(View.java:21163) 
                    at android.os.Handler.handleCallback(Handler.java:746) 
                    at android.os.Handler.dispatchMessage(Handler.java:95) 
                    at android.os.Looper.loop(Looper.java:148) 
                    at android.app.ActivityThread.main(ActivityThread.java:5443) 
                    at java.lang.reflect.Method.invoke(Native Method) 
                    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:728) 
                    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) 
                   Caused by: java.lang.reflect.InvocationTargetException 
                    at java.lang.reflect.Method.invoke(Native Method) 
                    at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:288) 
                    at android.view.View.performClick(View.java:5201)  
                    at android.view.View$PerformClick.run(View.java:21163)  
                    at android.os.Handler.handleCallback(Handler.java:746)  
                    at android.os.Handler.dispatchMessage(Handler.java:95)  
                    at android.os.Looper.loop(Looper.java:148)  
                    at android.app.ActivityThread.main(ActivityThread.java:5443)  
                    at java.lang.reflect.Method.invoke(Native Method)  
                    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:728)  
                    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)  
                   Caused by: android.os.NetworkOnMainThreadException 
                    at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1287) 
                    at libcore.io.BlockGuardOs.connect(BlockGuardOs.java:110) 
                    at libcore.io.IoBridge.connectErrno(IoBridge.java:137) 
                    at libcore.io.IoBridge.connect(IoBridge.java:122) 
                    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:183) 
                    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:163) 
                    at java.net.Socket.startupSocket(Socket.java:592) 
                    at java.net.Socket.tryAllAddresses(Socket.java:128) 
                    at java.net.Socket.<init>(Socket.java:178) 
                    at java.net.Socket.<init>(Socket.java:150) 
                    at brea.breverser.RequestToServer.sendPlay(RequestToServer.java:26) 
                    at java.lang.reflect.Method.invoke(Native Method)  
                    at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:288)  
                    at android.view.View.performClick(View.java:5201)  
                    at android.view.View$PerformClick.run(View.java:21163)  
                    at android.os.Handler.handleCallback(Handler.java:746)  
                    at android.os.Handler.dispatchMessage(Handler.java:95)  
                    at android.os.Looper.loop(Looper.java:148)  
                    at android.app.ActivityThread.main(ActivityThread.java:5443)  
                    at java.lang.reflect.Method.invoke(Native Method)  
                    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:728)  
                    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)  
+0

権限を明示的に求めましたか?何かを送る前に許可を許可する必要があります。あなたはアプリ情報のパーミッションを見ることができます。 – Arjun

+5

'原因:android.os.NetworkOnMainThreadException':http://stackoverflow.com/questions/6343166/how-to-fix-android-os-networkonmiththreadexception – CommonsWare

+0

もちろん、主な問題はNetworkOnMainThreadException .....ですTCPソケットを使用してサーバーに文字列を送信するための完全な実装についてここで見てください:http://stackoverflow.com/a/38163121/4409409 –

答えて

1

私はあなたのマニフェストが問題だとは思わない、アプリケーションパッケージ名&あなたのアクティビティのpackageキーワードにアクティビティ名が並んでいます。

ダンプからは、例外の原因が「メインスレッド上のネットワーク」の例外であるように見えます。ネットワークアクティビティをバックグラウンドスレッドに移動し、何が起こるかを確認してください。メインスレッド上でネットワークコールを行うのは良い考えではありませんでした。そして、OSはこれを実行しようとするたびに例外をスローします。

AsyncTaskを試してみるか、実際のネットワーク呼び出しを実行可能ファイルにラップし、バックグラウンドワーカースレッドに送信してみてください。

+0

それはそれを固定しました、ありがとう! :) –

0
によって引き起こさ

:android.os.NetworkOnMainThreadException

のAndroidはアプリのメインスレッド上のネットワーク活動を許可していません。これを行うには、新しいスレッドを作成する必要があります。詳細は、How to fix android.os.NetworkOnMainThreadException?を参照してください。

関連する問題