2014-02-19 3 views
0

Я в школе проекте пытаюсь подключить андроид приложения к серверу, которые дают нам час, но когда я пытаюсь соединить гнездо моего приложения я получил сообщение об ошибке:Может соединить гнездо в Android

Это код MainActivity.java

public void ejecutar(View view) throws UnknownHostException,IOException{ 


    InetAddress direServidor =InetAddress.getByName("192.168.1.68"); 
    Socket socket=new Socket(direServidor, 1000); 
    System.out.println("Si me presionaron"); 
    InputStream is=socket.getInputStream(); 
    BufferedReader br= new BufferedReader (new InputStreamReader (is)); 
    EditText et = (EditText)findViewById(R.id.fecha); 
    et.setText(br.readLine()); 
    br.close(); 
    socket.close(); 

} 

Это только функция.

Я уже настроил разрешения в Manifest.xml

<uses-permission android:name= "android.permission.INTERNET"/> 

Но ничто не похоже на работу!

Logcat:

> 02-19 00:26:27.044: E/AndroidRuntime(16758): FATAL EXCEPTION: main 
> 02-19 00:26:27.044: E/AndroidRuntime(16758): Process: 
> com.example.clientehora, PID: 16758 02-19 00:26:27.044: 
> E/AndroidRuntime(16758): java.lang.IllegalStateException: Could not 
> execute method of the activity 02-19 00:26:27.044: 
> E/AndroidRuntime(16758): at 
> android.view.View$1.onClick(View.java:3823) 02-19 00:26:27.044: 
> E/AndroidRuntime(16758): at 
> android.view.View.performClick(View.java:4438) 02-19 00:26:27.044: 
> E/AndroidRuntime(16758): at 
> android.view.View$PerformClick.run(View.java:18422) 02-19 
> 00:26:27.044: E/AndroidRuntime(16758): at 
> android.os.Handler.handleCallback(Handler.java:733) 02-19 
> 00:26:27.044: E/AndroidRuntime(16758): at 
> android.os.Handler.dispatchMessage(Handler.java:95) 02-19 
> 00:26:27.044: E/AndroidRuntime(16758): at 
> android.os.Looper.loop(Looper.java:136) 02-19 00:26:27.044: 
> E/AndroidRuntime(16758): at 
> android.app.ActivityThread.main(ActivityThread.java:5017) 02-19 
> 00:26:27.044: E/AndroidRuntime(16758): at 
> java.lang.reflect.Method.invokeNative(Native Method) 02-19 
> 00:26:27.044: E/AndroidRuntime(16758): at 
> java.lang.reflect.Method.invoke(Method.java:515) 02-19 00:26:27.044: 
> E/AndroidRuntime(16758): at 
> com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) 
> 02-19 00:26:27.044: E/AndroidRuntime(16758): at 
> com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) 02-19 
> 00:26:27.044: E/AndroidRuntime(16758): at 
> dalvik.system.NativeStart.main(Native Method) 02-19 00:26:27.044: 
> E/AndroidRuntime(16758): Caused by: 
> java.lang.reflect.InvocationTargetException 02-19 00:26:27.044: 
> E/AndroidRuntime(16758): at 
> java.lang.reflect.Method.invokeNative(Native Method) 02-19 
> 00:26:27.044: E/AndroidRuntime(16758): at 
> java.lang.reflect.Method.invoke(Method.java:515) 02-19 00:26:27.044: 
> E/AndroidRuntime(16758): at 
> android.view.View$1.onClick(View.java:3818) 02-19 00:26:27.044: 
> E/AndroidRuntime(16758): ... 11 more 02-19 00:26:27.044: 
> E/AndroidRuntime(16758): Caused by: 
> android.os.NetworkOnMainThreadException 02-19 00:26:27.044: 
> E/AndroidRuntime(16758): at 
> android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1145) 
> 02-19 00:26:27.044: E/AndroidRuntime(16758): at 
> libcore.io.BlockGuardOs.connect(BlockGuardOs.java:84) 02-19 
> 00:26:27.044: E/AndroidRuntime(16758): at 
> libcore.io.IoBridge.connectErrno(IoBridge.java:127) 02-19 
> 00:26:27.044: E/AndroidRuntime(16758): at 
> libcore.io.IoBridge.connect(IoBridge.java:112) 02-19 00:26:27.044: 
> E/AndroidRuntime(16758): at 
> java.net.PlainSocketImpl.connect(PlainSocketImpl.java:192) 02-19 
> 00:26:27.044: E/AndroidRuntime(16758): at 
> java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172) 02-19 
> 00:26:27.044: E/AndroidRuntime(16758): at 
> java.net.Socket.startupSocket(Socket.java:567) 02-19 00:26:27.044: 
> E/AndroidRuntime(16758): at java.net.Socket.<init>(Socket.java:226) 
> 02-19 00:26:27.044: E/AndroidRuntime(16758): at 
> com.example.clientehora.MainActivity.ejecutar(MainActivity.java:37) 

ответ

0

Вы должны запустить свой сокет в отдельном потоке, от основного потока, чтобы завершить эту операцию. Причина, заключающаяся в том, что эта тяжелая деятельность в основном потоке может заблокировать приложение и привести к его сбою.

public void ejecutar(View view) throws UnknownHostException,IOException{ 
    new Thread(new Runnable(){ 
     InetAddress direServidor = InetAddress.getByName("192.168.1.68"); 
     Socket socket = new Socket(direServidor, 1000); 
     System.out.println("Si me presionaron"); 
     InputStream is = socket.getInputStream(); 
     BufferedReader br = new BufferedReader (new InputStreamReader (is)); 
     EditText et = (EditText)findViewById(R.id.fecha); 
     et.setText(br.readLine()); 
     br.close(); 
     socket.close(); 
    }).start(); 
} 

Дайте этому спину.

+0

Я думаю, что это может быть проблема! Но я не могу понять, как это сделать на Java и Android. Можете ли вы привести мне пример или что-то еще? –

Смежные вопросы