- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试执行清除外部 SdCard 中存在的所有文件的任务。
我没有找到我的代码无法正常工作的地方。
这些是我的文件...
activity-main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
xmlns:android="http://schemas.android.com/apk/res/android">
<Button android:id="@+id/wipe_button"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Wipe the SD card." />
<TextView android:id="@+id/path"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
<TextView android:id="@+id/file"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
</LinearLayout>
WipeSdActivity.java
package com.example.wipe_sd;
import java.io.File;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class WipeSDActivity extends Activity {
private int mDeletedFiles = 0;
private int mDeletedFolders = 0;
private TextView mDirectoryTextView;
private TextView mFileTextView;
private List<String> mUndeleteableFiles;
MyAsyncTask test;
public Button btnwipe_sd;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_wipe_sd);
btnwipe_sd = (Button)findViewById(R.id.wipe_button);
test = new MyAsyncTask();
File[] arrayOfFile = new File[1];
arrayOfFile[0] = new File(Environment.getExternalStorageDirectory().getPath());
test.execute(arrayOfFile);
btnwipe_sd.setOnClickListener(new View.OnClickListener()
{
public void onClick(View paramAnonymousView)
{
new AlertDialog.Builder(WipeSDActivity.this).setCancelable(true)
.setMessage("This will attempt to wipe all directories and files on your SD card.")
.setPositiveButton("WIPE", new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface dialog, int which)
{
}
}).setNegativeButton("NO!", new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface dialog, int which)
{
dialog.dismiss();
}
}).show();
}
});
this.mDirectoryTextView = ((TextView)findViewById(R.id.path));
this.mFileTextView = ((TextView)findViewById(R.id.file));
this.mUndeleteableFiles = new ArrayList();
}
public class MyAsyncTask extends AsyncTask<File,Integer,Integer>{
protected Integer doInBackground(File[] ArrayOfFile) {
// TODO Auto-generated method stub
int i = 0;
progressivelyDelete(ArrayOfFile[0]);
if (ArrayOfFile[0].exists())
i = ArrayOfFile[0].listFiles().length;
return Integer.valueOf(i);
}
private void progressivelyDelete(File sd_File) {
// TODO Auto-generated method stub
if (sd_File == null);
while (true)
{
if (sd_File.isDirectory())
{
updateDirectory(sd_File.getPath());
File[] arrayOfFile = sd_File.listFiles();
int i = arrayOfFile.length;
int j = 0;
if (j < i)
{
File msd_File = arrayOfFile[j];
if (msd_File.canWrite())
progressivelyDelete(msd_File);
while (true)
{
j++;
break;
}
WipeSDActivity.this.mUndeleteableFiles.add(msd_File.getAbsolutePath());
}
sd_File.delete();
}
else
{
sd_File.delete();
updateFile(sd_File.getName());
}
}
}
private void updateFile(final String paramString) {
// TODO Auto-generated method stub
Log.d("SdWipe", "File - " + paramString);
WipeSDActivity.this.runOnUiThread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
TextView localfile_TextView = WipeSDActivity.this.mFileTextView;
Object[] arrayofObject = new Object[1];
arrayofObject[0] = paramString;
}
});
}
private void updateDirectory(final String paramString) {
// TODO Auto-generated method stub
Log.d("SdWipe", "Folder - " + paramString);
WipeSDActivity.this.runOnUiThread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
TextView localdir_TextView = WipeSDActivity.this.mDirectoryTextView;
Object[] arrayOfObject = new Object[1];
arrayOfObject[0] = paramString;
localdir_TextView.setText(String.format("Currently processing\n%s", arrayOfObject));
}
});
}
protected void onPostExecute(Integer paramInteger)
{
TextView dir_textview = WipeSDActivity.this.mDirectoryTextView;
Object[] arrayOfObject = new Object[2];
arrayOfObject[0] = Integer.valueOf(WipeSDActivity.this.mDeletedFolders);
arrayOfObject[1] = Integer.valueOf(WipeSDActivity.this.mDeletedFiles);
dir_textview.setText(String.format("Done\n%s folders deleted\n%s files deleted",arrayOfObject));
StringBuilder localStringBuilder = new StringBuilder();
Iterator localIterator = WipeSDActivity.this.mUndeleteableFiles.iterator();
while(localIterator.hasNext())
{
String str = (String) localIterator.next();
localStringBuilder.append(str + "\n");
}
WipeSDActivity.this.mFileTextView.setText(paramInteger + "files left on SD Card:\n" + localStringBuilder);
}
protected void onPreExecute()
{
WipeSDActivity.this.mUndeleteableFiles.clear();
}
}
}
list .xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.wipe_sd"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="18" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.example.wipe_sd.WipeSDActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
我得到的 Log Cat 错误是:
02-08 16:47:13.460: E/AndroidRuntime(270): java.lang.RuntimeException: Unable to start activity
ComponentInfo{com.example.wipe_sd/com.example.wipe_sd.WipeSDActivity}: java.lang.NullPointerException
02-08 16:47:13.460: E/AndroidRuntime(270): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)
02-08 16:47:13.460: E/AndroidRuntime(270): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
02-08 16:47:13.460: E/AndroidRuntime(270): at android.app.ActivityThread.access$2300(ActivityThread.java:125)
02-08 16:47:13.460: E/AndroidRuntime(270): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
02-08 16:47:13.460: E/AndroidRuntime(270): at android.os.Handler.dispatchMessage(Handler.java:99)
02-08 16:47:13.460: E/AndroidRuntime(270): at android.os.Looper.loop(Looper.java:123)
02-08 16:47:13.460: E/AndroidRuntime(270): at android.app.ActivityThread.main(ActivityThread.java:4627)
02-08 16:47:13.460: E/AndroidRuntime(270): at java.lang.reflect.Method.invokeNative(Native Method)
02-08 16:47:13.460: E/AndroidRuntime(270): at java.lang.reflect.Method.invoke(Method.java:521)
02-08 16:47:13.460: E/AndroidRuntime(270): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
02-08 16:47:13.460: E/AndroidRuntime(270): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
02-08 16:47:13.460: E/AndroidRuntime(270): at dalvik.system.NativeStart.main(Native Method)
02-08 16:47:13.460: E/AndroidRuntime(270): Caused by: java.lang.NullPointerException
02-08 16:47:13.460: E/AndroidRuntime(270): at com.example.wipe_sd.WipeSDActivity$MyAsyncTask.onPreExecute(WipeSDActivity.java:204)
02-08 16:47:13.460: E/AndroidRuntime(270): at android.os.AsyncTask.execute(AsyncTask.java:391)
02-08 16:47:13.460: E/AndroidRuntime(270): at com.example.wipe_sd.WipeSDActivity.onCreate(WipeSDActivity.java:44)
02-08 16:47:13.460: E/AndroidRuntime(270): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
02-08 16:47:13.460: E/AndroidRuntime(270): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
02-08 16:47:13.460: E/AndroidRuntime(270): ... 11 more
最佳答案
我在这里修改了 WipeSDActivity.java 类。请检查并告诉我。希望它对您有所帮助。谢谢。
import java.io.File;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.os.Environment;
import android.os.Handler;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class WipeSDActivity extends Activity {
private static ProgressDialog progressBar;
private static int progressBarStatus = 0;
private static Handler progressBarHandler = new Handler();
public Button btnwipe_sd;
private int fileCount = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.sd_card);
btnwipe_sd = (Button)findViewById(R.id.wipe_button);
btnwipe_sd.setOnClickListener(new OnClickListener()
{
public void onClick(final View view)
{
new AlertDialog.Builder(WipeSDActivity.this).setCancelable(true)
.setMessage("This will attempt to wipe all directories and files on your SD card.")
.setPositiveButton("WIPE", new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface dialog, int which)
{
dialog.dismiss();
FormatSDCard(view);
}
}).setNegativeButton("NO!", new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface dialog, int which)
{
dialog.dismiss();
}
}).show();
}
});
}
public void FormatSDCard(View v){
progressBar = new ProgressDialog(v.getContext());
progressBar.setCancelable(false);
progressBar.setMessage("File deleting ...");
progressBar.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
progressBar.setProgress(0);
progressBar.setMax(100);
progressBar.show();
new Thread(new Runnable() {
public void run() {
while (progressBarStatus < 100) {
//fileCount = 0;
// process some tasks
progressBarStatus = wipingSdcard();
// your computer is too fast, sleep 1 second
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
// Update the progress bar
progressBarHandler.post(new Runnable() {
public void run() {
progressBar.setProgress(progressBarStatus);
}
});
}
// ok, file is deleted,
if (progressBarStatus >= 100) {
// sleep 2 seconds, so that you can see the 100%
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
// close the progress bar dialog
progressBar.dismiss();
}
}
}).start();
}
public int wipingSdcard() {
File deleteMatchingFile = new File(Environment
.getExternalStorageDirectory().toString());
try {
File[] filenames = deleteMatchingFile.listFiles();
if (filenames != null && filenames.length > 0) {
for (File tempFile : filenames) {
if (tempFile.isDirectory()) {
wipeDirectory(tempFile.toString());
tempFile.delete();
} else {
tempFile.delete();
}
fileCount++;
progressBarStatus = fileCount;
progressBarHandler.post(new Runnable() {
public void run() {
progressBar.setProgress(progressBarStatus);
}
});
}
} else {
deleteMatchingFile.delete();
}
} catch (Exception e) {
e.printStackTrace();
}
return fileCount;
}
private void wipeDirectory(String name) {
File directoryFile = new File(name);
File[] filenames = directoryFile.listFiles();
if (filenames != null && filenames.length > 0) {
for (File tempFile : filenames) {
if (tempFile.isDirectory()) {
wipeDirectory(tempFile.toString());
tempFile.delete();
} else {
tempFile.delete();
}
}
} else {
directoryFile.delete();
}
}
}
如果你使用 >1.6 SDK,你还必须授予权限
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
在AndroidManifest.xml文件中
关于java - 以编程方式清除所有 SdCard 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21645572/
我正在尝试打印 timeval 类型的值。实际上我可以打印它,但我收到以下警告: 该行有多个标记 格式“%ld”需要“long int”类型,但参数 2 的类型为“struct timeval” 程序
我正在编写自己的 unix 终端,但在执行命令时遇到问题: 首先,我获取用户输入并将其存储到缓冲区中,然后我将单词分开并将它们存储到我的 argv[] 数组中。IE命令是“firefox”以启动存储在
我是 CUDA 的新手。我有一个关于一个简单程序的问题,希望有人能注意到我的错误。 __global__ void ADD(float* A, float* B, float* C) { con
我有一个关于 C 语言 CGI 编程的一般性问题。 我使用嵌入式 Web 服务器来处理 Web 界面。为此,我在服务器中存储了一个 HTML 文件。在此 HTML 文件中包含 JavaScript 和
**摘要:**在代码的世界中,是存在很多艺术般的写法,这可能也是部分程序员追求编程这项事业的内在动力。 本文分享自华为云社区《【云驻共创】用4种代码中的艺术试图唤回你对编程的兴趣》,作者: break
我有一个函数,它的任务是在父对象中创建一个变量。我想要的是让函数在调用它的级别创建变量。 createVariable testFunc() [1] "test" > testFunc2() [1]
以下代码用于将多个连续的空格替换为1个空格。虽然我设法做到了,但我对花括号的使用感到困惑。 这个实际上运行良好: #include #include int main() { int ch, la
我正在尝试将文件写入磁盘,然后自动重新编译。不幸的是,某事似乎不起作用,我收到一条我还不明白的错误消息(我是 C 初学者 :-)。如果我手动编译生成的 hello.c,一切正常吗?! #include
如何将指针值传递给结构数组; 例如,在 txt 上我有这个: John Doe;xxxx@hotmail.com;214425532; 我的代码: typedef struct Person{
我尝试编写一些代码来检索 objectID,结果是 2B-06-01-04-01-82-31-01-03-01-01 . 这个值不正确吗? // Send a SysObjectId SNMP req
您好,提前感谢您的帮助, (请注意评论部分以获得更多见解:即,以下示例中的成本列已添加到此问题中;西蒙提供了一个很好的答案,但成本列本身并未出现在他的数据响应中,尽管他提供的功能与成本列一起使用) 我
我想知道是否有人能够提出一些解决非线性优化问题的软件包的方法,而非线性优化问题可以为优化解决方案提供整数变量?问题是使具有相等约束的函数最小化,该函数受某些上下边界约束的约束。 我已经在R中使用了'n
我是 R 编程的初学者,正在尝试向具有 50 列的矩阵添加一个额外的列。这个新列将是该行中前 10 个值的平均值。 randomMatrix <- generateMatrix(1,5000,100,
我在《K&R II C 编程 ANSI C》一书中读到,“>>”和“0; nwords--) sum += *buf++; sum = (sum >>
当下拉列表的选择发生变化时,我想: 1) 通过 div 在整个网站上显示一些 GUI 阻止覆盖 2)然后处理一些代码 3) 然后隐藏叠加层。 问题是,当我在事件监听器函数中编写此逻辑时,将执行 onC
我正在使用 Clojure 和 RESTEasy 设计 JAX-RS REST 服务器. 据我了解,用 Lisp 系列语言编写的应用程序比用“传统”命令式语言编写的应用程序更多地构建为“特定于领域的语
我目前正在研究一种替代出勤监控系统作为一项举措。目前,我设计的用户表单如下所示: Time Stamp Userform 它的工作原理如下: 员工将选择他/她将使用的时间戳类型:开始时间、超时、第一次
我是一名学生,试图自学编程,从在线资源和像您这样的人那里获得帮助。我在网上找到了一个练习来创建一个小程序来执行此操作: 编写一个程序,读取数字 a 和 b(长整型)并列出 a 和 b 之间有多少个数字
我正在尝试编写一个 shell 程序,给定一个参数,打印程序的名称和参数中的每个奇数词(即,不是偶数词)。但是,我没有得到预期的结果。在跟踪我的程序时,我注意到,尽管奇数词(例如,第 5 个词,5 %
只是想知道是否有任何 Java API 可以让您控制台式机/笔记本电脑外壳上的 LED? 或者,如果不可能,是否有可能? 最佳答案 如果你说的是前面的 LED 指示电源状态和 HDD 繁忙状态,恐怕没
我是一名优秀的程序员,十分优秀!