0

我对 android 开发很陌生,我编写了以下代码来将我的 android 连接到 ftp 服务器

package com.example.test1;
import android.os.Bundle;
import android.app.Activity;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

import org.apache.commons.net.ftp.*;
public class MainActivity extends Activity {
    public FTPClient mFTPClient = null;
    Button but;
    public boolean ftpConnect(String host, String username, String password, int port) {
        try {
            mFTPClient = new FTPClient();
            // connecting to the host
            mFTPClient.connect(host, port);

           // Now check the reply code, if positive mean connection success
           if (FTPReply.isPositiveCompletion(mFTPClient.getReplyCode())) {

               // Login using username & password
               boolean status = mFTPClient.login(username, password);
               mFTPClient.setFileType(FTP.BINARY_FILE_TYPE);
               mFTPClient.enterLocalPassiveMode();

               return status;
           }
       } catch(Exception e) {
       CharSequence c = ""+e;
           int d = Toast.LENGTH_SHORT;
           Toast toast = Toast.makeText(getApplicationContext(),c,d);
           toast.show();
       }

       return false;
    }
@Override
protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        but=(Button)findViewById(R.id.button1);
        but.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                ftpConnect("127.0.0.1","userName","Password",21);
            }
        });
    }   
}

但这给出了 networkOnMainThread 异常,所以在搜索后我发现我必须使用AsyncTask但我不知道如何实现它!

4

3 回答 3

2
public void onClick(View v) {
  new AsyncTask() {
    publc Object doInBackground(Object...) {
      try {
        mFTPClient = new FTPClient();
        // connecting to the host
        mFTPClient.connect(host, port);

        // Now check the reply code, if positive mean connection success
        if (FTPReply.isPositiveCompletion(mFTPClient.getReplyCode())) {

           // Login using username & password
           boolean status = mFTPClient.login(username, password);
           mFTPClient.setFileType(FTP.BINARY_FILE_TYPE);
           mFTPClient.enterLocalPassiveMode();

           return status;
        }
      } catch(Exception e) {
        return e;
      }
    }
  }

  public void onPostExecute(Object res) {
    if (res instanceof Exception) {
       int d = Toast.LENGTH_SHORT;
       Toast toast = Toast.makeText(getApplicationContext(),""+res,d);
       toast.show();
    }
  }

}.execute();

另一个临时的“解决方法”是在 AndroidManifest.xml 中设置您的 android:targetSdkVersion="9" 或更低,因为此异常是在 API 级别 10 中引入的。

于 2013-11-12T14:25:30.217 回答
0

您可能需要参考 Android SDK 中的NetworkConnect示例。

于 2013-11-12T14:43:57.450 回答
0

Android 开发者的文档在这样一个重要的主题上非常丰富。你会搞定的。 http://developer.android.com/reference/android/os/AsyncTask.html

于 2013-11-12T14:19:14.587 回答