Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用asynctask android连接到套接字_Android_Sockets_Android Asynctask - Fatal编程技术网

使用asynctask android连接到套接字

使用asynctask android连接到套接字,android,sockets,android-asynctask,Android,Sockets,Android Asynctask,我正在尝试制作一个splashscreen,而我似乎正在尝试通过套接字连接服务器 我对安卓业务还很陌生,所以有可能我弄错了,反正它不起作用 public class SplashScreen extends Activity { private Socket socket; // the socket private final int port = 1500; // the socket port - 1500 private boolean connectivity=false; // if

我正在尝试制作一个splashscreen,而我似乎正在尝试通过套接字连接服务器

我对安卓业务还很陌生,所以有可能我弄错了,反正它不起作用

public class SplashScreen extends Activity {
private Socket socket; // the socket
private final int port = 1500; // the socket port - 1500
private boolean connectivity=false; // if connected to the socket or not
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_splash_screen);
    this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
    ConnectToServer cts= new ConnectToServer();
    cts.execute();}


private class ConnectToServer extends AsyncTask<Void, Void, Void> {

 @Override
 protected Void doInBackground(Void... params) {
     try {
         Log.d("socket", "trying to connect");
         socket = new Socket("10.0.0.11", port);
     } catch (UnknownHostException e1) {
         // TODO Auto-generated catch block
         e1.printStackTrace();
     } catch (IOException e1) {
         // TODO Auto-generated catch block
         e1.printStackTrace();
     }
     if (socket.isConnected())
         connectivity=true;
     return null;
 }}


 protected void onPostExecute() {
// execution of result of Long time consuming operation
 Intent i = new Intent(SplashScreen.this, MainActivity.class);
 i.putExtra("connectivity", connectivity);
 startActivity(i);
 finish();}
公共类SplashScreen扩展活动{
私有套接字;//套接字
private final int port=1500;//套接字端口-1500
private boolean connectivity=false;//是否连接到套接字
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u启动屏幕);
此.setRequestedOrientation(ActivityInfo.SCREEN\u ORIENTATION\u Graphic);
ConnectToServer cts=新的ConnectToServer();
cts.execute();}
私有类ConnectToServer扩展异步任务{
@凌驾
受保护的Void doInBackground(Void…参数){
试一试{
Log.d(“套接字”,“尝试连接”);
插座=新插座(“10.0.0.11”,端口);
}捕获(未知后异常e1){
//TODO自动生成的捕捉块
e1.printStackTrace();
}捕获(IOE1异常){
//TODO自动生成的捕捉块
e1.printStackTrace();
}
if(socket.isConnected())
连通性=真;
返回null;
}}
受保护的void onPostExecute(){
//执行耗时较长的操作的结果
意图i=新意图(SplashScreen.this,MainActivity.class);
i、 putExtra(“连接性”,连接性);
星触觉(i);
finish();}

OMG!你放错了一个花括号!!!我还建议你将这些属性设置为受保护的而不是私有的。这是一个很长的故事来解释原因(它是为了防止创建特殊的静态方法来获取私有字段。你看不到由编译器完成的过程)

公共类SplashScreen扩展活动{
受保护的套接字;//套接字
受保护的最终int端口=1500;//套接字端口-1500
受保护的布尔连接=false;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u启动屏幕);
此.setRequestedOrientation(ActivityInfo.SCREEN\u ORIENTATION\u Graphic);
ConnectToServer cts=新的ConnectToServer();
cts.execute();
}
私有类ConnectToServer扩展异步任务{
@凌驾
受保护的Void doInBackground(Void…参数){
Log.d(“套接字”,“尝试连接”);
试一试{
插座=新插座(“10.0.0.11”,端口);
}捕获(未知后异常e1){
//TODO自动生成的捕捉块
e1.printStackTrace();
}捕获(IOE1异常){
//TODO自动生成的捕捉块
e1.printStackTrace();
}
if(socket.isConnected())
连通性=真;
返回null;
}//这里有第二个}并且您完成了类声明,但没有在活动中重写以下方法!!!
@凌驾
受保护的void onPostExecute(void结果){
//执行耗时较长的操作的结果
Intent i=newintent(getBaseContext(),PreviewActivity.class);
i、 putExtra(“连接性”,连接性);
星触觉(i);
完成();
}
}
}

您是在模拟器上还是在真实设备上尝试此操作?因为emu上的10.0.0.11(局域网IP)不能在真实设备上运行,我担心android无法访问10.0.0.11,因为它不是局域网的一部分。Android有自己的虚拟局域网和127.0.0.1/localhost,因此请求10.x.x.x IP不会留下AOS。在我决定使用asynctask之前,我使用一个简单的线程以不同的方式编写了这段代码。这个ip地址工作得很好,我能够连接我的服务器,所以这不是问题所在。问题是-使用这种代码(AsyncTask),我无法连接到服务器,基本上这段代码什么都没有发生,是吗?这对你有用吗?如果是这样的话,就试着退回到简单的线程simetimes,因为它比AsyncTask工作得更好更快,所以没有必要使用AsyncTask。还要确保Wifi已打开。:)您是否也看到了日志msg,它来自
log.d(“socket”,“尝试连接”)?但它当然编译得很好!该活动有自己的
受保护的void onPostExecute()
方法,但您需要在AsyncTask类声明中重写它!!!!不是活动的一个!!!!我已经更新了src,如果你仍然没有理解的话,就复制粘贴它。哇,我甚至没有注意到我现在会尝试。我已经在我的项目中插入了你的代码,它工作了,至少它转储了日志消息。小心花括号。我已经更新了代码,onPostExecute的声明/重写不正确,所以如果你真的接受了我的代码,它就不应该编译。
public class SplashScreen extends Activity {
    protected Socket socket; // the socket
    protected final int port = 1500; // the socket port - 1500
    protected boolean connectivity=false;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_splash_screen);
    this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
    ConnectToServer cts= new ConnectToServer();
    cts.execute();
    }

    private class ConnectToServer extends AsyncTask<Void, Void, Void> {

         @Override
         protected Void doInBackground(Void... params) {

             Log.d("socket", "trying to connect");
             try {
                 socket = new Socket("10.0.0.11", port);
             } catch (UnknownHostException e1) {
                 // TODO Auto-generated catch block
                 e1.printStackTrace();
             } catch (IOException e1) {
                 // TODO Auto-generated catch block
                 e1.printStackTrace();
             }
             if (socket.isConnected())
                 connectivity=true;
             return null;
         } // here u have the second } and you finished the class declaration without the following method which is overriden in activity!!!


          @Override
     protected void onPostExecute(Void result) {
        // execution of result of Long time consuming operation
         Intent i = new Intent(getBaseContext(), PreviewActivity.class);
         i.putExtra("connectivity", connectivity);
         startActivity(i);
         finish();

         }
    }
}