【问题标题】:App crashes while trying to upload a folder by ftp android尝试通过 ftp android 上传文件夹时应用程序崩溃
【发布时间】:2014-03-07 15:30:56
【问题描述】:

这是我的代码:

Intent intent = new Intent();
        intent.setAction(Intent.ACTION_PICK);
        // FTP URL (Starts with ftp://, sftp:// or ftps:// followed by hostname and port).
        Uri ftpUri = Uri.parse("ftp://ftp.myserver.com:21");
        intent.setDataAndType(ftpUri, "vnd.android.cursor.dir/lysesoft.andftp.uri");
        // FTP credentials (optional)
        intent.putExtra("ftp_username", "user");
        intent.putExtra("ftp_password", "pass");
        //intent.putExtra("ftp_keyfile", "/sdcard/dsakey.txt");
        //intent.putExtra("ftp_keypass", "optionalkeypassword");
        // FTP settings (optional)
        intent.putExtra("ftp_pasv", "true");
        //intent.putExtra("ftp_resume", "true");
        //intent.putExtra("ftp_encoding", "UTF8");
        // Upload
        intent.putExtra("command_type", "upload");
        // Activity title
        intent.putExtra("progress_title", "Uploading folder ...");
        intent.putExtra("local_file1", "/sdcard/DCIM/try");
        // Optional initial remote folder (it must exist before upload)
        //intent.putExtra("remote_folder", "remotefolder/uploadedfolder");
        startActivityForResult(intent, 2);

LogCat:

03-07 17:27:49.471: W/dalvikvm(13281): threadid=1: thread exiting with uncaught exception (group=0x415c87c0)
03-07 17:27:49.471: E/AndroidRuntime(13281): FATAL EXCEPTION: main
03-07 17:27:49.471: E/AndroidRuntime(13281): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.whatsappxr/com.example.whatsappxr.MainActivity}: android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.PICK dat=ftp://ftp.attracto.tk:21 typ=vnd.android.cursor.dir/lysesoft.andftp.uri (has extras) }
03-07 17:27:49.471: E/AndroidRuntime(13281):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2339)
03-07 17:27:49.471: E/AndroidRuntime(13281):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2389)
03-07 17:27:49.471: E/AndroidRuntime(13281):    at android.app.ActivityThread.access$600(ActivityThread.java:153)
03-07 17:27:49.471: E/AndroidRuntime(13281):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1269)
03-07 17:27:49.471: E/AndroidRuntime(13281):    at android.os.Handler.dispatchMessage(Handler.java:99)
03-07 17:27:49.471: E/AndroidRuntime(13281):    at android.os.Looper.loop(Looper.java:137)
03-07 17:27:49.471: E/AndroidRuntime(13281):    at android.app.ActivityThread.main(ActivityThread.java:5289)
03-07 17:27:49.471: E/AndroidRuntime(13281):    at java.lang.reflect.Method.invokeNative(Native Method)
03-07 17:27:49.471: E/AndroidRuntime(13281):    at java.lang.reflect.Method.invoke(Method.java:525)
03-07 17:27:49.471: E/AndroidRuntime(13281):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:739)
03-07 17:27:49.471: E/AndroidRuntime(13281):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:555)
03-07 17:27:49.471: E/AndroidRuntime(13281):    at dalvik.system.NativeStart.main(Native Method)
03-07 17:27:49.471: E/AndroidRuntime(13281): Caused by: android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.PICK dat=ftp://ftp.attracto.tk:21 typ=vnd.android.cursor.dir/lysesoft.andftp.uri (has extras) }
03-07 17:27:49.471: E/AndroidRuntime(13281):    at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1632)
03-07 17:27:49.471: E/AndroidRuntime(13281):    at android.app.Instrumentation.execStartActivity(Instrumentation.java:1424)
03-07 17:27:49.471: E/AndroidRuntime(13281):    at android.app.Activity.startActivityForResult(Activity.java:3390)
03-07 17:27:49.471: E/AndroidRuntime(13281):    at android.app.Activity.startActivityForResult(Activity.java:3351)
03-07 17:27:49.471: E/AndroidRuntime(13281):    at com.example.whatsappxr.MainActivity.onCreate(MainActivity.java:37)
03-07 17:27:49.471: E/AndroidRuntime(13281):    at android.app.Activity.performCreate(Activity.java:5133)
03-07 17:27:49.471: E/AndroidRuntime(13281):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
03-07 17:27:49.471: E/AndroidRuntime(13281):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2293)
03-07 17:27:49.471: E/AndroidRuntime(13281):    ... 11 more

我应该怎么做才能让它工作?

【问题讨论】:

  • 好想你删除了用户名和密码 :)
  • 应用程序正在崩溃,因为没有内置方式(在 Android 操作系统中)来处理 ftp:// URL。您将不得不构建自己的活动,使用 ftp 上传文件。
  • 为此使用 Java 标准 FTP 方法。

标签: java android android-intent ftp request


【解决方案1】:

线索在异常描述中:

原因:android.content.ActivityNotFoundException:没有活动 发现处理 Intent { act=android.intent.action.PICK dat=ftp://ftp.attracto.tk:21 typ=vnd.android.cursor.dir/lysesoft.andftp.uri(有附加功能)}

在 Android 中,您可以指定 Intent 处理特定 Intent 的处理程序,在本例中是带有 ftp:// url 架构的 android.intent.action.PICK Intent

如果您有一个接受这种Intent 的应用程序,该应用程序将被打开并正确处理您的情况。

所以你要处理用户没有安装有效应用程序的情况。

您可以使用此方法来确定是否将处理一个意图,并且仅在它返回 true 时继续:

public static boolean isIntentAvailable(Context context, Intent intentToCheck) {
    final PackageManager packageManager = context.getPackageManager();
    List<ResolveInfo> list =
            packageManager.queryIntentActivities(intentToCheck,
                    PackageManager.MATCH_DEFAULT_ONLY);
    return list.size() > 0;
}

您可以更深入地了解 Intent 在 Android 中的工作原理here

【讨论】:

    猜你喜欢
    • 2014-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多