【问题标题】:Ftp connect errorftp连接错误
【发布时间】:2014-04-01 18:43:39
【问题描述】:

我正在使用此代码,它在带有 Android v2.3.7 的三星 Galaxy Tab1 上运行良好

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

public FTPClient mFTPClient = null;

mFTPClient = new FTPClient();
mFTPClient.connect(host, port); 
.........

现在 i0 已经使用 Andorid v4.0.3 在 Samsung Galaxy Tab2 上安装了我的应用程序,但是当我尝试连接时收到此错误:

致命异常:主要 java.lang.RuntimeException: 无法使用 Intent { cmp=com.quickorder/.Ftp (has extras) } 绑定到服务 com.quickorder.Ftp@412e4bd8: java.lang.NullPointerException: println 需要在 android.app 上的消息。 ActivityThread.handleBindService(ActivityThread.java:2304) 在 android.app.ActivityThread.access$1700(ActivityThread.java:128) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1218) 在 android.os.Handler.dispatchMessage(Handler.java:99) 在 android.os.Looper.loop(Looper.java:137) 在 android.app.ActivityThread.main(ActivityThread.java:4514) 在 java.lang.reflect.Method.invokeNative(Native Method) 在 java.lang.reflect.Method.invoke(Method.java:511) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:790) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557) 在 dalvik.system.NativeStart.main(本机方法) 引起:java.lang.NullPointerException: println 需要一条消息 在 android.util.Log.println_native(本机方法) 在 android.util.Log.d(Log.java:155) 在 com.quickorder.Ftp.ftp_get(Ftp.java:131) 在 com.quickorder.Ftp.onBind(Ftp.java:66) 在 android.app.ActivityThread.handleBindService(ActivityThread.java:2291) ... 10 更多

    public void ftp_get(String $name_in, String $name_fi){

    try {

        mFTPClient = new FTPClient();
        mFTPClient.connect(host, port);   
        //String $mess =  mFTPClient.getReplyString();
       // System.out.println($mess);
        if (FTPReply.isPositiveCompletion(mFTPClient.getReplyCode())) {


            boolean status = mFTPClient.login(user, pass);
            //String $mess =  mFTPClient.getReplyString();
            //System.out.println($mess);

            mFTPClient.setFileType(FTP.BINARY_FILE_TYPE);
            mFTPClient.enterLocalPassiveMode();

            String srcFilePath = "QuickOrder/"+ag1+$name_in;
            String desFilePath = $name_fi;
            try {

                 try {

                     File sdcard = Environment.getExternalStorageDirectory();
                     File file = new File(sdcard, $name_fi);

                     BufferedOutputStream desFileStream = new BufferedOutputStream(new FileOutputStream("/sdcard/"+desFilePath),8*1024);
                     boolean sts = mFTPClient.retrieveFile(srcFilePath, desFileStream);
                     //String $mess =  mFTPClient.getReplyString();
                     //System.out.println($mess);
                     desFileStream.close();        

                 }catch(Exception e) {
                     String log = e.getMessage();
                     Log.d("Errore: ", log);
                 }
            } catch (Exception e) {
                }
            //System.out.println("file prelevato");
            mFTPClient.logout();
            mFTPClient.disconnect();
        }

    }catch(Exception e) {
        String log = e.getMessage(); //**this is LINE 131**
        Log.d("Errore: ", log);

    }


}

e.printStackTrace()

04-01 11:56:35.208: W/System.err(9154): android.os.NetworkOnMainThreadException
04-01 11:56:35.208: W/System.err(9154): at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1099)
04-01 11:56:35.208: W/System.err(9154):     at    libcore.io.BlockGuardOs.connect(BlockGuardOs.java:84)
04-01 11:56:35.208: W/System.err(9154):     at  libcore.io.IoBridge.connectErrno(IoBridge.java:127)
04-01 11:56:35.208: W/System.err(9154):     at libcore.io.IoBridge.connect(IoBridge.java:112)
04-01 11:56:35.208: W/System.err(9154):     at  java.net.PlainSocketImpl.connect(PlainSocketImpl.java:192)
04-01 11:56:35.208: W/System.err(9154):     at  java.net.PlainSocketImpl.connect(PlainSocketImpl.java:459)
04-01 11:56:35.208: W/System.err(9154):     at java.net.Socket.connect(Socket.java:842)
04-01 11:56:35.208: W/System.err(9154):     at  org.apache.commons.net.SocketClient.connect(SocketClient.java:176)
04-01 11:56:35.208: W/System.err(9154):     at com.quickorder.Ftp.ftp_get(Ftp.java:91)
04-01 11:56:35.208: W/System.err(9154):     at com.quickorder.Ftp.onBind(Ftp.java:67)
04-01 11:56:35.208: W/System.err(9154):     at android.app.ActivityThread.handleBindService(ActivityThread.java:2291)
04-01 11:56:35.215: W/System.err(9154):     at android.app.ActivityThread.access$1700(ActivityThread.java:128)
04-01 11:56:35.215: W/System.err(9154):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1218)
04-01 11:56:35.215: W/System.err(9154):     at android.os.Handler.dispatchMessage(Handler.java:99)
04-01 11:56:35.215: W/System.err(9154):     at android.os.Looper.loop(Looper.java:137)
04-01 11:56:35.215: W/System.err(9154):     at android.app.ActivityThread.main(ActivityThread.java:4514)
04-01 11:56:35.215: W/System.err(9154):     at java.lang.reflect.Method.invokeNative(Native Method)
04-01 11:56:35.215: W/System.err(9154):     at java.lang.reflect.Method.invoke(Method.java:511)
04-01 11:56:35.215: W/System.err(9154):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:790)
04-01 11:56:35.215: W/System.err(9154):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557)
04-01 11:56:35.215: W/System.err(9154):     at dalvik.system.NativeStart.main(Native  Method)

【问题讨论】:

  • 可以给我们看看com.quickorder.Ftp.ftp_get(Ftp.java:131) at com.quickorder.Ftp.onBind(Ftp.java:66) 的源码吗?
  • 第 131 行在哪里?我想它一定在你的一个 catch 块中。在实际记录之前检查 log=e.getMessage() 是否不为空。
  • 我已经标记了第 131 行并且日志不为空
  • 错误在 mFTPClient.connect(host, port) 但我看不到其他信息
  • 主机和端口的值是多少?

标签: android


【解决方案1】:

您不能在主线程中进行网络操作。像这样重写你的代码,例如:(抱歉缩进)

public void ftp_get(String $name_in, String $name_fi){
AsyncTask< String, Integer, Boolean > task = new AsyncTask< String, Integer, Boolean >()
            {

                private Exception m_exception = null;
                @Override
                protected Boolean doInBackground( String... params )
                {
                    Boolean result = Boolean.FALSE;


        try {

        mFTPClient = new FTPClient();
        mFTPClient.connect(host, port);   
        //String $mess =  mFTPClient.getReplyString();
       // System.out.println($mess);
        if (FTPReply.isPositiveCompletion(mFTPClient.getReplyCode())) {


            boolean status = mFTPClient.login(user, pass);
            //String $mess =  mFTPClient.getReplyString();
            //System.out.println($mess);

            mFTPClient.setFileType(FTP.BINARY_FILE_TYPE);
            mFTPClient.enterLocalPassiveMode();

            String srcFilePath = "QuickOrder/"+ag1+$name_in;
            String desFilePath = $name_fi;
            try {

                 try {

                     File sdcard = Environment.getExternalStorageDirectory();
                     File file = new File(sdcard, $name_fi);

                     BufferedOutputStream desFileStream = new BufferedOutputStream(new FileOutputStream("/sdcard/"+desFilePath),8*1024);
                     boolean sts = mFTPClient.retrieveFile(srcFilePath, desFileStream);
                     //String $mess =  mFTPClient.getReplyString();
                     //System.out.println($mess);
                     desFileStream.close();   

        result = Boolean.TRUE;     

                 }catch(Exception e) {
                     String log = e.getMessage();
                     Log.d("Errore: ", log);
                 }
            } catch (Exception e) {
                }
            //System.out.println("file prelevato");
            mFTPClient.logout();
            mFTPClient.disconnect();
        }

    }catch(Exception e) {
        String log = e.getMessage(); //**this is LINE 131**
        Log.d("Errore: ", log);

    }

                    return result;
                }

                protected void onPostExecute(Boolean result) {

                    if ( m_exception == null && result )
                    {
                        callback.onSuccess( "success!" );
                    }
                    else
                    {
                        callback.onFailure( "Connection failed." );
                    }
                }


            };

        task.execute( "" );
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-13
    • 1970-01-01
    • 2013-03-26
    • 1970-01-01
    • 1970-01-01
    • 2019-06-23
    相关资源
    最近更新 更多