Java 如何在android中执行没有按钮的功能?

Java 如何在android中执行没有按钮的功能?,java,android,networking,android-activity,client,Java,Android,Networking,Android Activity,Client,现在这个代码不起作用了 public class MainActivity extends Activity { String X = "Music"; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layou

现在这个代码不起作用了

public class MainActivity extends Activity {


String X = "Music"; 
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_main);


 new AsyncTask<Void, Void, Void>() {
        @Override
        protected Void doInBackground(Void... voids) {
            Socket socket = null;
             DataOutputStream dataOutputStream = null;
             DataInputStream dataInputStream = null;

             try {
              socket = new Socket("172.16.82.131", 8888);
              dataOutputStream = new DataOutputStream(socket.getOutputStream());
              dataInputStream = new DataInputStream(socket.getInputStream());
              dataOutputStream.writeUTF(X);
              //textIn.setText(dataInputStream.readUTF());
             } catch (UnknownHostException e) {
              // TODO Auto-generated catch block
              e.printStackTrace();
             } catch (IOException e) {
              // TODO Auto-generated catch block
              e.printStackTrace();
             }
             finally{
              if (socket != null){
               try {
                socket.close();
               } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
               }
              }

              if (dataOutputStream != null){
               try {
                dataOutputStream.close();
               } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
               }
              }

              if (dataInputStream != null){
               try {
                dataInputStream.close();
               } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
               }
              }
             }


            return null;
        }
    }.execute();




   }


    }
公共类MainActivity扩展活动{
String X=“音乐”;
/**在首次创建活动时调用*/
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
新建异步任务(){
@凌驾
受保护的空位背景(空位…空位){
套接字=空;
DataOutputStream DataOutputStream=null;
DataInputStream DataInputStream=null;
试一试{
插座=新插座(“172.16.82.131”,8888);
dataOutputStream=新的dataOutputStream(socket.getOutputStream());
dataInputStream=新的dataInputStream(socket.getInputStream());
dataOutputStream.writeUTF(X);
//setText(dataInputStream.readUTF());
}捕获(未知后异常e){
//TODO自动生成的捕捉块
e、 printStackTrace();
}捕获(IOE异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
最后{
if(套接字!=null){
试一试{
socket.close();
}捕获(IOE异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
}
如果(dataOutputStream!=null){
试一试{
dataOutputStream.close();
}捕获(IOE异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
}
如果(dataInputStream!=null){
试一试{
dataInputStream.close();
}捕获(IOE异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
}
}
返回null;
}
}.execute();
}
}
在我之前的帖子中,我发布了一个代码,其中一个功能在单击按钮时正在执行,但现在我已经将代码更改为这一个。 在启动应用程序时,我尝试在后台运行我的代码。。但是什么也没发生。我找不到哪里出了问题。。请提供帮助:(

将onClick()重命名为其他名称,删除按钮并单击侦听器。然后它将失败,因为您正在UI线程上进行网络调用。您将需要使用AsyncTask()(或类似工具)

如果你只是想让它运行而不在乎答案

public void onCreate(Bundle savedInstanceState) {
    // ...
    new AsyncTask<Void, Void, Void>() {
        @Override
        protected Void doInBackground(Void... voids) {
            try {
                // your code here
            } catch (Exception e) {
                // catch any errors
            }
            return null;
        }
    }.execute();
    // ...
}
public void onCreate(Bundle savedInstanceState){
// ...
新建异步任务(){
@凌驾
受保护的空位背景(空位…空位){
试一试{
//你的代码在这里
}捕获(例外e){
//抓住任何错误
}
返回null;
}
}.execute();
// ...
}
将onClick()重命名为其他名称,移除按钮并单击侦听器。然后,它将失败,因为您正在UI线程上进行网络调用。您将需要使用AsyncTask()(或类似工具)

如果你只是想让它运行而不在乎答案

public void onCreate(Bundle savedInstanceState) {
    // ...
    new AsyncTask<Void, Void, Void>() {
        @Override
        protected Void doInBackground(Void... voids) {
            try {
                // your code here
            } catch (Exception e) {
                // catch any errors
            }
            return null;
        }
    }.execute();
    // ...
}
public void onCreate(Bundle savedInstanceState){
// ...
新建异步任务(){
@凌驾
受保护的空位背景(空位…空位){
试一试{
//你的代码在这里
}捕获(例外e){
//抓住任何错误
}
返回null;
}
}.execute();
// ...
}
试试这个

public class AndroidClient extends Activity {  

        String x = "Music";
             /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_main);

         textIn = (TextView)findViewById(R.id.textin);
      doThis();

    }                
       public void doThis() {
     // TODO Auto-generated method stub
     Socket socket = null;
     DataOutputStream dataOutputStream = null;
     DataInputStream dataInputStream = null;

     try {
     socket = new Socket("112.13.835.187", 8183);
     dataOutputStream = new DataOutputStream(socket.getOutputStream());
     dataInputStream = new DataInputStream(socket.getInputStream());
     dataOutputStream.writeUTF(x);
     textIn.setText(dataInputStream.readUTF());
     } catch (UnknownHostException e) {
     // TODO Auto-generated catch block
     e.printStackTrace();
     } catch (IOException e) {
     // TODO Auto-generated catch block
     e.printStackTrace();
     }
     finally{
     if (socket != null){
     try {
     socket.close();
     } catch (IOException e) {
     // TODO Auto-generated catch block
     e.printStackTrace();
      }
     }

     if (dataOutputStream != null){
     try {
     dataOutputStream.close();
     } catch (IOException e) {
      // TODO Auto-generated catch block
     e.printStackTrace();
     }
     }

     if (dataInputStream != null){
      try {
       dataInputStream.close();
      } catch (IOException e) {
       // TODO Auto-generated catch block
       e.printStackTrace();
       }
       }
       } 
       }};
    }
试试这个

public class AndroidClient extends Activity {  

        String x = "Music";
             /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_main);

         textIn = (TextView)findViewById(R.id.textin);
      doThis();

    }                
       public void doThis() {
     // TODO Auto-generated method stub
     Socket socket = null;
     DataOutputStream dataOutputStream = null;
     DataInputStream dataInputStream = null;

     try {
     socket = new Socket("112.13.835.187", 8183);
     dataOutputStream = new DataOutputStream(socket.getOutputStream());
     dataInputStream = new DataInputStream(socket.getInputStream());
     dataOutputStream.writeUTF(x);
     textIn.setText(dataInputStream.readUTF());
     } catch (UnknownHostException e) {
     // TODO Auto-generated catch block
     e.printStackTrace();
     } catch (IOException e) {
     // TODO Auto-generated catch block
     e.printStackTrace();
     }
     finally{
     if (socket != null){
     try {
     socket.close();
     } catch (IOException e) {
     // TODO Auto-generated catch block
     e.printStackTrace();
      }
     }

     if (dataOutputStream != null){
     try {
     dataOutputStream.close();
     } catch (IOException e) {
      // TODO Auto-generated catch block
     e.printStackTrace();
     }
     }

     if (dataInputStream != null){
      try {
       dataInputStream.close();
      } catch (IOException e) {
       // TODO Auto-generated catch block
       e.printStackTrace();
       }
       }
       } 
       }};
    }

在onCreate中编写代码,也可以用于后台进程

在onCreate中编写代码,也可以用于后台进程

使用AsyncTask处理数据输出流和套接字

请参见下面的示例代码

从onCreate()方法调用下面的行

然后像下面这样创建类,并在onPostExecute方法中写入这一行
textIn.setText(dataInputStream.readUTF());

私有类签名服务扩展异步任务{
套接字=空;
DataOutputStream DataOutputStream=null;
DataInputStream DataInputStream=null;
@凌驾
受保护的void onPreExecute(){
super.onPreExecute();
试一试{
progressDilaog=ProgressDialog.show(MainActivity.this,“,
“加载”,正确,错误);
}捕获(例外e){
e、 printStackTrace();
}
}
@凌驾
受保护的Void doInBackground(Void…参数){
试一试{
插座=新插座(“112.13.835.187”,8183);
dataOutputStream=新的dataOutputStream(socket.getOutputStream());
dataInputStream=新的dataInputStream(socket.getInputStream());
dataOutputStream.writeUTF(x);
}捕获(未知后异常e){
e、 printStackTrace();
}捕获(IOE异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
最后{
if(套接字!=null){
试一试{
socket.close();
}捕获(IOE异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
}
如果(dataOutputStream!=null){
试一试{
dataOutputStream.close();
}捕获(IOE异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
}
如果(dataInputStream!=null){
试一试{
dataInputStream.close();
}捕获(IOE异常){
e、 printStackTrace();
}
}
}
返回null;
}
@凌驾
受保护的void onPostExecute(void结果){
super.onPos
public class AndroidClient extends Activity {

String x = "Music";

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_main);

 Button buttonSend = (Button)findViewById(R.id.send);
 textIn = (TextView)findViewById(R.id.textin);
 startonCreate(); 
 }
 public void startonCreate(){
 Socket socket = null;
 DataOutputStream dataOutputStream = null;
 DataInputStream dataInputStream = null;

 try {
  socket = new Socket("112.13.835.187", 8183);
  dataOutputStream = new DataOutputStream(socket.getOutputStream());
  dataInputStream = new DataInputStream(socket.getInputStream());
 dataOutputStream.writeUTF(x);
 textIn.setText(dataInputStream.readUTF());
 } catch (UnknownHostException e) {
 // TODO Auto-generated catch block
 e.printStackTrace();
 } catch (IOException e) {
 // TODO Auto-generated catch block
  e.printStackTrace();
  }
  finally{
  if (socket != null){
 try {
 socket.close();
 } catch (IOException e) {
 // TODO Auto-generated catch block
 e.printStackTrace();
 }
if (dataOutputStream != null){
 try {
 dataOutputStream.close();
 } catch (IOException e) {
  // TODO Auto-generated catch block
 e.printStackTrace();
 }
 }

 if (dataInputStream != null){
 try {
    dataInputStream.close();
   } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
   }
 }
 } 

 }
}