【问题标题】:Transfer App to Samsung Galaxy Tab issue将应用程序转移到三星 Galaxy Tab 问题
【发布时间】:2011-04-01 12:53:20
【问题描述】:

我一直在开发一个关于 HTC 愿望的应用程序。它运行良好。单击按钮时,应用程序会从我的 Web 服务器下载文件并将其保存到 SD 卡上。

我现在想在我的三星 Galaxy Tab 上运行这个应用程序。但是,当我单击按钮时会崩溃。

我能看到的唯一原因是该选项卡不允许访问 SD 卡。它是我在 HTC Deisre 手机中使用的同一张 SD 卡,它没有写保护或任何东西?

有谁知道哪里出了问题?

这是我用来下载文件并将其存储在卡上的代码...

 class CreatefilesTask extends AsyncTask<Object, Integer, Boolean> {
    protected Boolean doInBackground(Object... arg0) {
        try{
            URL url  = new URL("http://213.143.36.32/file.csv");
            URLConnection conexion = url.openConnection();
            conexion.connect();
            int lenghtOfFile = conexion.getContentLength();
            InputStream is = url.openStream();
            File testDirectory = 
            new File(Environment.getExternalStorageDirectory()+"/File");
            if(!testDirectory.exists()){
                testDirectory.mkdir();
            }
            FileOutputStream fos = new FileOutputStream(testDirectory+"/file.csv");
            byte data[] = new byte[1024];
            int count = 0;
            long total = 0;
            int progress = 0;
            while ((count=is.read(data)) != -1){
                total += count;
                int progress_temp = (int)total*100/lenghtOfFile;
                if(progress_temp%10 == 0 && progress != progress_temp){
                    progress = progress_temp;
                }
                fos.write(data, 0, count);
            }
            is.close();
            fos.close();
        }
        catch(Exception e){
            e.printStackTrace();
        }

这在 Desire 上效果很好。

堆栈跟踪..

03-31 12:45:07.823: INFO/PowerManagerService(2494): Ulight 3->7|0
03-31 12:45:07.831: VERBOSE/WindowManager(2494): Delivering toWindow{48419208 com.android.qservices/com.android.qservices.AdminActivity paused=false}
03-31 12:45:07.898: VERBOSE/WindowManager(2494): Delivering toWindow{48419208 com.android.qservices/com.android.qservices.AdminActivity paused=false}
03-31 12:45:08.261: WARN/System.err(5314): java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
03-31 12:45:08.261: WARN/System.err(5314):     at android.os.Handler.<init>(Handler.java:121)
03-31 12:45:08.265: WARN/System.err(5314):     at android.widget.Toast.<init>(Toast.java:77)
03-31 12:45:08.265: WARN/System.err(5314):     at android.widget.Toast.makeText(Toast.java:266)
03-31 12:45:08.269: WARN/System.err(5314):     at com.android.qservices.AdminActivity$CreatefilesTask.doInBackground(AdminActivity.java:117)
03-31 12:45:08.269: WARN/System.err(5314):     at com.android.qservices.AdminActivity$CreatefilesTask.doInBackground(AdminActivity.java:1)
03-31 12:45:08.269: WARN/System.err(5314):     at android.os.AsyncTask$2.call(AsyncTask.java:185)
03-31 12:45:08.269: WARN/System.err(5314):     at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
03-31 12:45:08.273: WARN/System.err(5314):     at java.util.concurrent.FutureTask.run(FutureTask.java:137)
03-31 12:45:08.273: WARN/System.err(5314):     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1068)
03-31 12:45:08.273: WARN/System.err(5314):     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:561)
03-31 12:45:08.273: WARN/System.err(5314):     at java.lang.Thread.run(Thread.java:1096)
03-31 12:45:08.280: WARN/System.err(5314): java.io.FileNotFoundException: /mnt/sdcard/File/file.csv (No such file or directory)
03-31 12:45:08.284: WARN/System.err(5314):     at org.apache.harmony.luni.platform.OSFileSystem.openImpl(Native Method)
03-31 12:45:08.284: WARN/System.err(5314):     at org.apache.harmony.luni.platform.OSFileSystem.open(OSFileSystem.java:152)
03-31 12:45:08.288: WARN/System.err(5314):     at java.io.FileInputStream.<init>(FileInputStream.java:82)
03-31 12:45:08.288: WARN/System.err(5314):     at com.android.qservices.AdminActivity$CreatefilesTask.doInBackground(AdminActivity.java:148)
03-31 12:45:08.288: WARN/System.err(5314):     at com.android.qservices.AdminActivity$CreatefilesTask.doInBackground(AdminActivity.java:1)
03-31 12:45:08.288: WARN/System.err(5314):     at android.os.AsyncTask$2.call(AsyncTask.java:185)
03-31 12:45:08.292: WARN/System.err(5314):     at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
03-31 12:45:08.292: WARN/System.err(5314):     at java.util.concurrent.FutureTask.run(FutureTask.java:137)
03-31 12:45:08.292: WARN/System.err(5314):     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1068)
03-31 12:45:08.296: WARN/System.err(5314):     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:561)
03-31 12:45:08.296: WARN/System.err(5314):     at java.lang.Thread.run(Thread.java:1096)

【问题讨论】:

  • 你有崩溃的 logcat 输出吗?
  • 我收到警告消息和 java io 文件未找到异常
  • 03-31 12:28:20.905: WARN/System.err(4700): java.io.FileNotFoundException: /mnt/sdcard/file.csv(没有这样的文件或目录)
  • 03-31 12:28:20.909: WARN/System.err(4700): at java.io.FileOutputStream.(FileOutputStream.java:168)
  • 我实际上并不知道所有这些是什么意思,我假设它找不到真正应该在那里的文件,如果它在 sd 卡上不存在则应该创建的文件夹没有被创建

标签: android


【解决方案1】:

Samsung Galaxy Tab 拥有大量内部闪存。所以Environment.getExternalStorageDirectory() 返回/mnt/sdcard/ 但这实际上是内部存储。真正的外部存储在/mnt/sdcard/external_sd/。详情请见this post

【讨论】:

    【解决方案2】:

    找到答案了! 在 Galaxy 选项卡上,存储不仅是 /sdcard 它是 /sdcard/external_sd/

    【讨论】:

    • 如果你偶然发现了这个,你应该检查你的代码,如果你使用了硬编码的路径。你不应该那样做!
    • 我没有使用硬编码,我尝试使用 Environment.getExternalStorageDirectory(),但由于某种原因,它给了你 /sdcard/,在银河系中它是 sdcard/external_sd/
    • 也许你应该使用 Environment.getExternalStorageDirectory().getPath() 这对我在银河选项卡上有用...
    • 不行还是不行,我得用...Environment.getExternalStorageDirectory()+"/external_sd/
    【解决方案3】:

    我猜是这条线引起了麻烦:

    new FileOutputStream(testDirectory+"/file.csv");
    

    您首先创建了一个目录file,但根据您的堆栈跟踪,您尝试访问SD卡根目录上的file.csv。所以我猜你不能简单地将 file.csv 附加到 testDirectory 类型为 File 的变量中。

    【讨论】:

    • 如果我在应用程序应该在 sdcard 上创建一个名为 File 的目录之前放置一个断点...它没有这样做。这段代码在 HTC 的愿望上运行良好......它在 Galaxy 上的功能会有所不同吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-21
    • 2011-04-14
    • 1970-01-01
    • 2014-03-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多