1

I am trying to make a simple android client on java to send a string to a python server on a pc using TCP. However, I keep getting this error message. It lets me run my application, but it crashes whenever I try to send the string. I am using Android Studio 2.1.2 and I am running the tests on an physical android device. Here's the code (not finished but should already send the string):

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

Here's AndroidManifest.xml:

<?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>

Which raises the following exception:

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

And here's logcat:

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) 
Cœur
  • 37,241
  • 25
  • 195
  • 267
  • Did you ask for permissions explicitly? You need to allow permissions before sending anything. You can see the permissions in app info. – Arjun Aug 22 '16 at 22:28
  • 5
    `Caused by: android.os.NetworkOnMainThreadException`: http://stackoverflow.com/questions/6343166/how-to-fix-android-os-networkonmainthreadexception – CommonsWare Aug 22 '16 at 22:34
  • The main problem of course is the NetworkOnMainThreadException..... Also, have a look here for a fully working implementation for using a TCP Socket to send a string to a server: http://stackoverflow.com/a/38163121/4409409 – Daniel Nugent Aug 22 '16 at 22:37
  • I'm confused...the error in your title and in the stack trace are different. Are you getting both of these errors? – Code-Apprentice Aug 22 '16 at 22:58

2 Answers2

1

I don't think that your manifest is the problem, the application package name & Activity name line up with the package keyword of your Activity.

From your dump, it looks like the cause of the exception is your 'network on the main thread' exception. Try moving the network activity to a background thread and see what happens. Making network calls on the main thread has never been a good idea, and the OS throws an exception now whenever you try to do this.

Try an AsyncTask or just try wrapping the actual network call in a runnable and submit it to a background worker thread.

Dan Devine
  • 859
  • 1
  • 8
  • 19
0

Caused by: android.os.NetworkOnMainThreadException

Android does not allow network activity on the main thread of the app. You need to create a new thread to do this on. See How to fix android.os.NetworkOnMainThreadException? for more details.

Community
  • 1
  • 1
Code-Apprentice
  • 81,660
  • 23
  • 145
  • 268