我正在尝试创建一些类以获得更清晰的代码,但我发生了这个错误: 我有以下课程:
import java.io.IOException;
import android.content.Context;
import android.os.AsyncTask;
import android.util.Log;
import com.metaio.sdk.MetaioDebug;
import com.metaio.tools.io.AssetsManager;
public class AssetsExtracter extends AsyncTask<Integer, Integer, Boolean>
{
@Override
protected Boolean doInBackground(Integer... params)
{
try
{
AssetsManager.extractAllAssets(getApplicationContext(), true);
}
catch (IOException e)
{
MetaioDebug.printStackTrace(Log.ERROR, e);
return false;
}
return true;
}
}
在我的主要活动中,我像这样调用AssetsExtracter类:
// extract all the assets
AssetsExtracter mTask = new AssetsExtracter();
mTask.execute(0);
但是我在AssetsExtracter类的GetApplicationContext()
上收到错误。它应该是与上下文相关的东西但是我应该如何编辑类来解决这个问题呢?
答案 0 :(得分:1)
在AssetsExtracter
类中添加一个构造函数,该类以Context
作为参数,将其存储在成员变量中并使用doInBackground()
中的变量。
可能异步任务曾经是定义getApplicationContext()
的类中的非静态内部类,例如Activity
。作为一个独立的阶级,没有提供该方法的外部阶级。
答案 1 :(得分:1)
您正在延长AsyncTask
。
AsyncTask
或Activity
报告Service
的地方, onPostExecute()
没有意义。
因此,让您的类构造函数接受您的Activity的Context,然后使用Context.getApplicationContext()
或者,如果您只需要一些与Android UI无关的异步执行,则可以使用普通Java Executor.execute()
答案 2 :(得分:1)
将您的代码更改为这样。在构造函数中传递上下文
public class AssetsExtracter extends AsyncTask<Integer, Integer, Boolean>{
Context context;
public AssetsExtracter(Context context){
this.context = context;
}
@Override
protected Boolean doInBackground(Integer... params)
{
try
{
AssetsManager.extractAllAssets(context, true);
}
catch (IOException e)
{
MetaioDebug.printStackTrace(Log.ERROR, e);
return false;
}
return true;
}
}
答案 3 :(得分:1)
public class AssetsExtracter extends AsyncTask<Integer, Integer, Boolean>
{
private Context context;
public void AssetsExtracter(Context context){
this.context = context;
}
@Override
protected Boolean doInBackground(Integer... params)
{
try
{
AssetsManager.extractAllAssets(context, true);
}
catch (IOException e)
{
MetaioDebug.printStackTrace(Log.ERROR, e);
return false;
}
return true;
}
}