2013-09-02 2 views
3

저는 android 및 java programing을 처음 사용합니다. 나는이 코드를 실행하면Java ftpclient 응용 프로그램이 연결되지 않습니다.

public class NewMainActivity extends Activity { 
TextView Display; 
//declare a public FTP client object. 
public FTPClient mFTPClient = null; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_new_main); 
    final TextView Display = (TextView) findViewById(R.id.tvResults); 

    try { 
     mFTPClient = new FTPClient(); 

      // connecting to the host 
     mFTPClient.connect("www.filegenie.com",21); 

      // now check the reply code, if positive mean connection success 
      if (FTPReply.isPositiveCompletion(mFTPClient.getReplyCode())) { 
       // login using username & password 
       boolean status = mFTPClient.login("user", "MyPassword"); 

       // Set File Transfer Mode 

       mFTPClient.setFileType(FTP.BINARY_FILE_TYPE); 
       mFTPClient.enterLocalPassiveMode(); 

       Display.setText("Correct"+ String.valueOf(status)); //return status; 
      } 

     }catch(Exception e) { 
      Display.setText(" Exception message is = "+e.getMessage()+" Reply code = "+mFTPClient.getReplyCode()); 

     } 

} 

내가 특정 오류가 없지만 프로그램이 mFTPClient.connect 방법을 실행하고 '예외'부분으로 이동하지 않았고 내가 얻을 "널 FTP 서버에 연결하는 코드를 다음 쓰기 "예외 getMessage 및"0 "ReplyCode로. 나는 이클립스를 사용하고 있습니다 및 ADT는 v22.0.1-685705 구축 등

import org.apache.commons.net.ftp.FTP; 
import org.apache.commons.net.ftp.FTPClient; 
import org.apache.commons.net.ftp.FTPReply; 

모든 필요한 파일을 가져올 수 있습니다. 또한 android 프로젝트의 lib에 commons-net-3.3, commons-net-3.3-sources 및 commons-net-examples-3.3 파일을 포함 시켰으며 commons-net-3.3-src의 java 파일과 폴더도 포함 시켰습니다. | src | 메인 | 자바 | org | 아파치 | 커먼 | net 폴더를 Android 프로젝트의 src 폴더에 추가하려면 org | 아파치 | 커먼 | 그물. 문제가 무엇인지 알 수 없습니다. 이 점에 대해 어느 누구라도 나를 도울 수 있습니까?

동일한 서버에 comercial ftp 클라이언트를 사용하여 액세스 할 수 있습니다.

미리 감사드립니다.

답변

3

나는 당신의 코드를 시험해 본 결과 괜찮습니다. 응답 코드에 따라 서버 연결이 설정되지 않았다고 가정합니다. 당신이 매니페스트 파일에 인터넷 권한을 가진 앱에 부여했는지 확인하십시오 :

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

편집 : 예외 스택에서 당신이 메인 스레드에서이 코드를 실행하기 위해 노력하고 있음을, 그것은 분명 추적. Android 3.0 (Honeycomb) 이상에서는 기본적으로 UI 스레드에서 네트워크 호출을 실행할 수 없습니다. 그 이유는 간단합니다. 네트워크 통화가 무기한 차단되어 응용 프로그램 UI가 효과적으로 중단 될 수 있습니다. 당신은 그것을 해결하는 방법 두 가지 옵션이 있습니다

게으른 방법 - 네트워크를 확인 therad 해제를 호출

StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder() 
            .permitAll() 
            .build(); 
StrictMode.setThreadPolicy(policy); 

당신은 항상 다시

StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder() 
            .detectAll() 
            .penaltyLog() 
            .penaltyDeath() 
            .build(); 
StrictMode.setThreadPolicy(policy); 

적절한

를 사용하여 스레드 검사를 활성화 할 수 있습니다 way - AsyncTask를 사용하여 백그라운드 작업자 스레드에서 FTP 호출을 실행합니다. AsyncTasks에 대한 예제 및 포괄적 인 설명은 here을 참조하십시오.

+0

친애하는, 답장을 보내 주셔서 감사합니다. 이미 인터넷 허가를 시도했지만 여전히 작동하지 않습니다. 코드에 대한 다른 특별한 설정을 적용해야합니까? –

+0

@MudasserNaseer, 예외 유형 및 스택 추적을 가져올 수 있습니까? – Jk1

+0

다음과 같은 스택 추적이 있는데 예외 유형을 지정하는 방법을 모르겠습니다. 파트 -I : android.os.NetworkOnMainThreadException \ n \ tat android.os.StrictMode $ AndroidBlockGuardPolicy.onNetwork (StrictMode.java:1117) \ n \ tat java.net.InetAddress.lookupHostByName (InetAddress.java:385) \ n \ tat java.net.InetAddress.getAllByNameImpl (InetAddress.java:236) \ n \ tat java.net.InetAddress.getByName (InetAddress.java:289) \ n \ tat org.apache.commons.net.SocketClient.connect (SocketClient (NewMainActivity.java:27) \ n \ tat –