Android Studio拒绝套接字EACCESS权限

时间:2015-02-05 12:00:16

标签: android-studio remote-access permission-denied socketexception

我正在尝试使用套接字连接将我的Android模拟器连接到我的主机。

我有一个简单的Java服务器在端口6789上运行并减少主机。 我有以下代码:

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


    // Declares streamText to refer to text area to show all messages
    TextView streamText = ((TextView) findViewById(R.id.streamText));
    streamText.setText("");

    streamText.append("Attempting connection at " + serverIP + " : 6789 \n");
    try {
        connection = new Socket(InetAddress.getByName(serverIP), 6789); // WHAT IP to connect to host, not virtual device host
        streamText.append("Connected to: " + connection.getInetAddress().getHostAddress());
    }catch(IOException Exception){
        streamText.append(Exception.toString());
        Exception.printStackTrace();
    }


}

我在logcat上收到此错误:

02-05 11:46:52.257    2663-2663/net.ruiruivo.myfirstapp.chatclientv1 E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: net.ruiruivo.myfirstapp.chatclientv1, PID: 2663
java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{net.ruiruivo.myfirstapp.chatclientv1/net.ruiruivo.myfirstapp.chatclientv1.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View android.view.Window.findViewById(int)' on a null object reference
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2209)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360)
        at android.app.ActivityThread.access$800(ActivityThread.java:144)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:135)
        at android.app.ActivityThread.main(ActivityThread.java:5221)
        at java.lang.reflect.Method.invoke(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:372)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
 Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View android.view.Window.findViewById(int)' on a null object reference
        at android.app.Activity.findViewById(Activity.java:2071)
        at net.ruiruivo.myfirstapp.chatclientv1.MainActivity.<init>(MainActivity.java:33)
        at java.lang.reflect.Constructor.newInstance(Native Method)
        at java.lang.Class.newInstance(Class.java:1572)
        at android.app.Instrumentation.newActivity(Instrumentation.java:1065)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2199)

在我的textView窗口中,Exception表示:

java.net.SocketException:套接字失败:EACCES(权限被拒绝)

我搜索了这个网站和其他网站,在我的清单中出现的距离最近的答案是<permission android:name="android.permission.INTERNET"></permission>,但没有解决问题。

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

你的问题出在其他地方。

1。)发布您的XML文件,因为您似乎遇到了NPE,因为streamText为空

2。)您无法在主线程中执行网络代码 - 这将导致

 android.os.NetworkOnMainThreadException

你必须为此实现一个单独的任务,例如:

private class NetworkTask extends AsyncTask<Void, Void, Object>{...}

更新

你走了:

@Override
protected void onCreate(Bundle savedInstanceState) {
    //your code
    new NetworkTask().execute();
}

private class NetworkTask extends AsyncTask<Void, Void, Object>{

    @Override
    protected Object doInBackground(Void... v) {

        try {
            //do your network stuff here
            return "";
        } 
        catch (HttpException e) {
            return e;
        }
    }

    // onPostExecute displays the results of the AsyncTask.
    @Override
    protected void onPostExecute(Object result) {

        if(result instanceof String){
                //everything was fine
        }
        else{
            if(((HttpException)result).getMessage()!=null){
                //exception occured
            }
        }
   }
}