2013-09-02 22 views
3

Я новичок в программировании android и java. Я пишу следующий код для подключения к FTP-серверуПриложение 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 и переходит к «Exception» части и я получаю «нулевой «как исключение getMessage и« 0 »в качестве ReplyCode. меня импортировать все необходимые файлы, такие как

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

Я использую затмение и ADT Построить v22.0.1-685705. Я также включил commons-net-3.3, commons-net-3.3-sources и commons-net-examples-3.3 в библиотеку проекта Android, а также включил java-файлы и папки из commons-net-3.3-src | src | главная | java | org | apache | общие | net в папку src проекта Android, создав папки org | apache | общие | сеть. Я не мог понять, в чем проблема. Может ли кто-нибудь помочь мне в этом отношении.

Доступ к одному и тому же серверу возможен с помощью коммерческого ftp-клиента.

Заранее спасибо.

ответ

3

Я пробовал ваш код, и он работает нормально. На основе кода ответа, который вы получаете, я предполагаю, что соединение с сервером даже не установлено. Убедитесь, что вы предоставили свое приложение с разрешения INTERNET в файле манифеста:

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

EDIT: Из стека исключений проследить это ясно, что вы пытаетесь выполнить этот код из основного потока. В Android 3.0 (Honeycomb) или позже вам не разрешено выполнять любой сетевой вызов в потоке пользовательского интерфейса по умолчанию. Причина проста: сетевой вызов может блокироваться на неопределенное время, эффективно замораживая пользовательский интерфейс приложения. У вас есть два варианта, как исправить:

Ленивый путь - Отключить 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 - выполнять вызовы FTP из рабочего рабочего потока с использованием AsyncTask. Посмотрите here для получения более подробной информации о AsyncTasks.

+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 .java: 203) \ n \ tat com.example.new_1.NewMainActivity.onCreate (NewMainActivity.java:27) \ n \ tat –

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