【问题标题】:Socket EACCESS permission denied with Android StudioSocket EACCESS 权限被 Android Studio 拒绝
【发布时间】:2015-02-05 12:00:16
【问题描述】:

我正在尝试通过套接字连接将我的 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 窗口中,异常提示:

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

我已经搜索过这个和其他网站,在我的清单中出现的最接近这个的答案是&lt;permission android:name="android.permission.INTERNET"&gt;&lt;/permission&gt;,但没有解决问题。

谁能帮忙?

【问题讨论】:

  • 尝试使用 而不是
  • 我看到并尝试了没有结果,将再试一次。谢谢
  • 是的,但与你写的不同的是:
  • 我可以使用我的代码在 TextView 中看到消息错误,但是如果我切换到其他权限,应用程序甚至无法启动并立即给出错误,我觉得我的代码中缺少某些内容。
  • TextView 中出现错误信息:

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


【解决方案1】:

您的问题出在其他地方。

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

【讨论】:

  • 是的,我后来遇到了这个问题...... :) 让我重新发布另一个错误的代码。
  • 嗯...创建线程并测试,然后在必要时发布代码,它有很多代码。谢谢。
  • 所以...我的按钮调用方法运行,请问我在哪里可以实现新的线程代码?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-06-22
  • 2011-05-03
  • 1970-01-01
  • 1970-01-01
  • 2023-04-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多