Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
FTP连接java_Java_Android - Fatal编程技术网

FTP连接java

FTP连接java,java,android,Java,Android,我正在尝试将文件上载到服务器。通过FTP将文件上载到服务器的方式是什么 我写了这节课: serverconnect.java: import java.io.IOException; import java.net.SocketException; import org.apache.commons.net.SocketClient; import org.apache.commons.net.ftp.FTPClient; public class serverconnection {

我正在尝试将文件上载到服务器。通过FTP将文件上载到服务器的方式是什么

我写了这节课:

serverconnect.java:

import java.io.IOException;
import java.net.SocketException;
import org.apache.commons.net.SocketClient;
import org.apache.commons.net.ftp.FTPClient;


public class serverconnection
{

    public FTPClient connectftp() 
    {
        FTPClient ftp = null;
        try {
            ftp.connect("ftp://ftp.drivehq.com/");
            ftp.login("zule", "*****");
        //  ftp.changeWorkingDirectory("/public");
        //  ftp.makeDirectory("200");
        } catch (SocketException en) {
            // TODO Auto-generated catch block
            en.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        return ftp;
    }
}
这是主要活动,只有相关代码:

import android.view.View;
import android.view.View.OnClickListener;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.widget.Button;
import android.widget.TextView;
import java.io.IOException;
import java.net.SocketException;
import org.apache.commons.net.ftp.FTPClient;



public class MainActivity extends Activity implements OnClickListener {
    Button scan;
    String contents;
    String format;
    TextView contentstext;
    TextView formattext;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //----------------------FTP-------------
        serverconnection ftpconnect =new serverconnection();
        FTPClient ftp=ftpconnect.connectftp();
        scan=(Button)findViewById(R.id.scanbutton);
        .....
当我在手机上安装应用程序时,我得到一个错误:不幸的是,你的应用程序必须停止

新守则:

public class MainActivity extends Activity implements OnClickListener {
    Button scan;
    String contents;
    String format;
    TextView contentstext;
    TextView formattext;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //----------------------FTP-------------
        //serverconnection ftpconnect =new serverconnection();
        //SimpleFTP ftp=ftpconnect.connectftp();
        SimpleFTP ftp = new SimpleFTP();
        try {
            ftp.connect("market.bugs3.com", 21, "u884282808", "lionetwork1");
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
新的logcat:

09-16 13:43:31.131: E/AndroidRuntime(1203): FATAL EXCEPTION: main
09-16 13:43:31.131: E/AndroidRuntime(1203): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.market/com.example.market.MainActivity}: android.os.NetworkOnMainThreadException
09-16 13:43:31.131: E/AndroidRuntime(1203):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1956)
09-16 13:43:31.131: E/AndroidRuntime(1203):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981)
09-16 13:43:31.131: E/AndroidRuntime(1203):     at android.app.ActivityThread.access$600(ActivityThread.java:123)
09-16 13:43:31.131: E/AndroidRuntime(1203):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147)
09-16 13:43:31.131: E/AndroidRuntime(1203):     at android.os.Handler.dispatchMessage(Handler.java:99)
09-16 13:43:31.131: E/AndroidRuntime(1203):     at android.os.Looper.loop(Looper.java:137)
09-16 13:43:31.131: E/AndroidRuntime(1203):     at android.app.ActivityThread.main(ActivityThread.java:4424)
09-16 13:43:31.131: E/AndroidRuntime(1203):     at java.lang.reflect.Method.invokeNative(Native Method)
09-16 13:43:31.131: E/AndroidRuntime(1203):     at java.lang.reflect.Method.invoke(Method.java:511)
09-16 13:43:31.131: E/AndroidRuntime(1203):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
09-16 13:43:31.131: E/AndroidRuntime(1203):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
09-16 13:43:31.131: E/AndroidRuntime(1203):     at dalvik.system.NativeStart.main(Native Method)
09-16 13:43:31.131: E/AndroidRuntime(1203): Caused by: android.os.NetworkOnMainThreadException
09-16 13:43:31.131: E/AndroidRuntime(1203):     at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1099)
09-16 13:43:31.131: E/AndroidRuntime(1203):     at java.net.InetAddress.lookupHostByName(InetAddress.java:391)
09-16 13:43:31.131: E/AndroidRuntime(1203):     at java.net.InetAddress.getAllByNameImpl(InetAddress.java:242)
09-16 13:43:31.131: E/AndroidRuntime(1203):     at java.net.InetAddress.getAllByName(InetAddress.java:220)
09-16 13:43:31.131: E/AndroidRuntime(1203):     at java.net.Socket.tryAllAddresses(Socket.java:108)
09-16 13:43:31.131: E/AndroidRuntime(1203):     at java.net.Socket.<init>(Socket.java:177)
09-16 13:43:31.131: E/AndroidRuntime(1203):     at java.net.Socket.<init>(Socket.java:149)
09-16 13:43:31.131: E/AndroidRuntime(1203):     at org.jibble.simpleftp.SimpleFTP.connect(SimpleFTP.java:68)
09-16 13:43:31.131: E/AndroidRuntime(1203):     at com.example.market.MainActivity.onCreate(MainActivity.java:31)
09-16 13:43:31.131: E/AndroidRuntime(1203):     at android.app.Activity.performCreate(Activity.java:4465)
09-16 13:43:31.131: E/AndroidRuntime(1203):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
09-16 13:43:31.131: E/AndroidRuntime(1203):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920)
09-16 13:43:31.131: E/AndroidRuntime(1203):     ... 11 more

问题是您正试图在主线程上进行网络调用。这在Android 3.0或更高版本上是不允许的

您应该通过在不同的线程上调用FTP服务器来解决这个问题。执行此操作的一个好方法是使用AsyncTask:

private class FtpTask extends AsyncTask<Void, Void, FTPClient> {
     protected FTPClient doInBackground(Void... args) {
        serverconnection ftpconnect =new serverconnection();
        FTPClient ftp=ftpconnect.connectftp();
        return ftp;
     }

     protected void onPostExecute(FTPClient result) {
         Log.v("FTPTask","FTP connection complete");
         ftpClient = result;
         //Where ftpClient is a instance variable in the main activity
     }
 }
编辑:

如果要在不同方法之间传递参数,可以更改 异步任务超类初始化


例如,AsyncTask可以将字符串变量传递给doInBackground方法,使用double跟踪进度,并使用整数作为结果类型结果类型是doInBackground的返回类型,它将作为参数发送到onPostExecute。

我没有堆栈跟踪,因为我没有在模拟器上运行应用程序,因为它没有internet连接。也许有人看到了此代码的问题?我知道问题是ftpthanks,我将这个检查添加到我的代码中,但是它仍然没有解决我的问题@Reimeus,我添加了commons-net-2.0.jar和commons-net-ftp-2.0.jar,问题是哪个版本?1.4.1或2.0?我添加了commons-net-1.4.1.jar并删除了commons-net-2.0.jar和commons-net-ftp-2.0.jar,我遇到了同样的问题:不幸的是,你的应用程序停止了。。。,有人有另一个解决方案吗?我在删除commons-net-2.0.jar和commons-net-ftp-2.0.jar并添加外部jar:commons-net-1.4.1.jar后添加了更新的logcat。希望它有助于理解问题谢谢回答,我用您编写的代码创建了一个名为:FtpTask的新任务…但是它给我写了一个错误:FtpTask类型必须实现继承的抽象方法AsyncTask.doInBackgroundVoid…,我如何解决它?非常感谢!!,该应用程序对我来说工作正常,不会抛出错误…但是我需要做的一个更改是从私有类FtpTask extends AsyncTask中删除私有类FtpTask。如何从新FtpTask.execute中接收ftp;?再次感谢您,您可以通过如下方式将FtpTask类的结果类型设置为FTPClient:AsyncTask。然后在onPostExecute中,您可以将其返回到主活动。最好是将FtpTask作为主活动的内部类,这样它就可以访问主活动的字段和属性。我不明白你的意思……你能用更新的函数编辑你的答案吗?谢谢你,我将我的主活动编辑为:SimpleFTP ftpclient=newFtpTask.execute;在FtpTask.java中,我改为:protectedvoid onPostExecuteFTPClient结果{Log.vFTPTask,FTP连接完成;ftpclient=result;}但是ftpclient在FtpTask.java文件中无法识别,因此它表示我需要创建一个ftpclient本地变量,我不确定我是否完全理解您的意思
new FtpTask().execute();