【发布时间】: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