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 に答える