0

我检查了其他答案,但他们没有帮助我解决这个错误。也许我做错了什么。

这是我的代码:

    void uploadPic() throws FileNotFoundException
{
    FileInputStream fis = new FileInputStream(path);
    FTPClient con = new FTPClient();
    int bytesAvailable;
    try
    {
        con.connect("ftp://ftp.drivehq.com/");
        Toast.makeText(this, "Connected to FTP", Toast.LENGTH_SHORT).show();
        if (con.login("x", "x"))
        {
            Toast.makeText(this, "Logged in", Toast.LENGTH_SHORT).show();
            con.enterLocalPassiveMode(); // Active mode doesn't really work on Android
            bytesAvailable = fis.available();
            byte[] barray = new byte[bytesAvailable];
            fis.read(barray);
            ByteArrayInputStream in = new ByteArrayInputStream(barray);
            boolean result = con.storeFile("/CameraUpload.jpg", in);
            in.close();
            if (result) Log.v("Upload Result", "Succeeded");
        }
    }
    catch (Exception e)
    {
        e.printStackTrace();
    }
}

我已经为我的项目添加了 INTERNET 权限。logcat 显示以下错误:

android.os.NetworkOnMainThreadException
W/System.err(17531):    at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1099)
W/System.err(17531):    at java.net.InetAddress.lookupHostByName(InetAddress.java:391

我通过 Wifi 连接到互联网。

4

2 回答 2

1

当您尝试从主线程执行网络操作(例如 FTP)时,似乎会引发该异常。出于性能原因,这是不允许的(这样在执行可能需要一段时间的操作时,应用程序似乎不会锁定用户)。假设您使用的是 Honeycomb 或更高版本,您需要将建立连接的代码移动到它自己的子线程中。

http://developer.android.com/reference/android/os/NetworkOnMainThreadException.html

http://developer.android.com/guide/practices/design/responsiveness.html

于 2012-06-11T09:38:54.160 回答
0

此错误很可能意味着您的设备无法解析ftp.drivehq.com到其 IP 地址。我不能肯定地说,因为你只粘贴了错误日志的一部分。确保您有网络连接并且您的 DNS 工作正常。例如,看看您是否可以通过 android 浏览器连接到同一个站点。

于 2012-06-11T08:39:21.380 回答