2013-05-02 4 views
0

api lvl 8과 9에서 작동하는 파일 발신자 코드가 있습니다. 그러나 target-api lvl을 16 또는 17로 변경하면 오류가 발생하고 프로그램이 직접 닫힙니다. < "android : targetSdkVersion = .."> 속성을 ​​제거하면 작동합니다. 하지만 16 또는 17 lvl로 그 속성을 써야합니다. 나는 16 또는 17 api lvls를 일할 필요가있다. 다음은Nexus 7 android api lvl 16과 17에서 소켓을 열면 충돌이 발생합니까?

SendButton.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
      try { 
        Socket sock = new Socket("192.168.2.7",5656); 
        File myFile = new File ("/mnt/sdcard/TEST/TEST.xml"); 
        byte [] mybytearray = new byte [(int)myFile.length()]; 
        FileInputStream fis = new FileInputStream(myFile); 
        BufferedInputStream bis = new BufferedInputStream(fis); 
        bis.read(mybytearray,0,mybytearray.length); 
        OutputStream os = sock.getOutputStream(); 
        os.write(mybytearray,0,mybytearray.length); 
        os.flush(); 
        sock.close(); 
       } 
      catch (IOException e) { 
      } 
     } 
    }); 

: 은 (17 LVL 내 넥서스 7 버전 4.2.2 (API)와 내가 USB 애플리케이션에 대한 몇 가지 16/17 API를 LVL 속성을 사용합니다) 여기에

는 작업 전송 파일 코드 내 안드로이드 매니페스트 파일 버전 및 사용 권한 :

android:minSdkVersion="8" 
    android:targetSdkVersion="8" /> 
    <uses-permission android:name="android.permission.INTERNET"/> 
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/> 
    <uses-permission android:name="android.permission.INTERNET"/> 
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/> 
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> 
    <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" /> 

코드는 이와 유사합니다. 하지만 나는 android : targetSdkVersion = "16 or 17"을 변경할 필요가있다.

Nexus7에 대한 문제 해결 방법은 무엇입니까?

답변

1

상위 버전 API가있는 UI 스레드에서 네트워크의 데이터를 처리하면 예외 (NetworkOnMainThreadException)가 발생합니다. 그래서 당신은 작업 스레드의 네트워크 데이터를 처리 할 수 ​​있습니다

public void onClick(View v) { 
     new Thread(new Runnable() { 
      public void run() {  
       try { 
        Socket sock = new Socket("192.168.2.7",5656); 
        File myFile = new File ("/mnt/sdcard/TEST/TEST.xml"); 
        byte [] mybytearray = new byte [(int)myFile.length()]; 
        FileInputStream fis = new FileInputStream(myFile); 
        BufferedInputStream bis = new BufferedInputStream(fis); 
        bis.read(mybytearray,0,mybytearray.length); 
        OutputStream os = sock.getOutputStream(); 
        os.write(mybytearray,0,mybytearray.length); 
        os.flush(); 
        sock.close(); 
       }catch (IOException e) { 
       } 
      } 
      }).start(); 
     } 

당신은 대단히 buptcoder 감사가

+0

API 11에 추가 된 http://developer.android.com/reference/android/os/NetworkOnMainThreadException.html

에서 자세한 내용을 볼 수 있습니다. 모든 것이 이제 잘됩니다. – tolgatuna26