5

我不能在服务中的异步任务中使用 getFilesDir()。我看到了这篇文章: Android:在 AsyncTask 中写入文件 它解决了活动中的问题,但我找不到在服务中执行此操作的方法。如何使用服务中的异步任务写入内部存储文件?这是我在异步任务中的代码:

  File file = new File(getFilesDir() + "/IP.txt");
4

2 回答 2

2

Service和都Activity扩展自ContextWrapper,所以它有getFilesDir()方法。将 Service 的实例传递给AsyncTask对象将解决它。

就像是:

File file = new File(myContextRef.getFilesDir() + "/IP.txt");

当您创建 AsyncTask 时,传递当前服务的引用(我想您正在创建AsyncTaskObjectfrom Service):

import java.io.File;

import android.app.Service;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.IBinder;

public class MyService extends Service {
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

    protected void useFileAsyncTask() {
        FileWorkerAsyncTask task = new FileWorkerAsyncTask(this);
        task.execute();
    }

    private static class FileWorkerAsyncTask extends AsyncTask<Void, Void, Void> {

        private Service myContextRef;

        public FileWorkerAsyncTask(Service myContextRef) {
            this.myContextRef = myContextRef;
        }

        @Override
        protected Void doInBackground(Void... params) {
            File file = new File(myContextRef.getFilesDir() + "/IP.txt");
            // use it ...
            return null;
        }
    }
}
于 2013-09-05T12:05:30.710 回答
0

我认为当您启动服务时,您应该传递getFileDir()如下提供的字符串路径。

Intent serviceIntent = new Intent(this,YourService.class); 
serviceIntent.putExtra("fileDir", getFileDir());

在您的服务onStart方法中,

Bundle extras = intent.getExtras(); 
if(extras == null)
    Log.d("Service","null");
else
{
    Log.d("Service","not null");
    String fileDir = (String) extras.get("fileDir");
}
于 2013-09-05T12:06:56.663 回答