我是新来的android和java编程。 我写下面的代码连接到FTP服务器
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”部分,我得到“null”作为exceptiongetMessage和“0”作为ReplyCode。 我已经导入了所有必需的文件,如
import org.apache.commons.net.ftp.FTP; import org.apache.commons.net.ftp.FTPClient; import org.apache.commons.net.ftp.FTPReply;
我正在使用eclipse和ADT Build v22.0.1-685705。 我还在android项目的lib中包含了commons-net-3.3,commons-net-3.3-sources和commons-net-examples-3.3文件,还包含了来自commons-net-3.3-src的java文件和文件夹。 src | 主| | java | org | apache | commons | net文件夹移动到Android项目的src文件夹,方法是创build文件夹org | apache | commons | 净。 我无法弄清楚是什么问题。 在这方面,任何人都可以帮助我。
同一台服务器可以用商业ftp客户端访问。
java线程和系统线程之间有什么关系?
Proguard错误:期望类path分隔符 – 不知道我需要把path放在引号中
Cordova 2.7.0 PushPlugin“cordova无法parsing”和“ctx无法parsing”
Ubuntu:Android设备debugging
Android SDK突然停止工作
提前致谢。
将android移植到自定义arm设备需要哪些知识/专业知识?
如何设置Android SDK的命令行开发在Linux上?
Android Shell EOF
使用CMake(而不是Qt Creator)为Android编译Qt应用程序
分片的UDP数据包没有被应用程序接收
我试过你的代码,它工作正常。 根据你得到的响应代码,我假设连接到服务器还没有建立。 确保您已经在清单文件中授予您的应用程序INTERNET权限:
<uses-permission android:name="android.permission.INTERNET" />
编辑:从异常堆栈跟踪很清楚,你试图从主线程执行此代码。 在Android 3.0(Honeycomb)或更高版本中,默认情况下不允许在UI线程中执行任何网络调用。 原因很简单:网络调用可能会阻塞无限期的时间,有效地冻结应用程序UI。 你有两个选择如何解决它:
懒惰的方式 – 禁用网络调用的检查:
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);
正确的方法 – 使用AsyncTask从后台工作线程执行FTP调用。 在这里看看有关AsyncTasks的例子和全面的解释。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。