Android 静态类中的异步任务

Android 静态类中的异步任务,android,class,static,android-asynctask,android-fragments,Android,Class,Static,Android Asynctask,Android Fragments,我在我的应用程序中使用actionbar sherlock/fragments 我的问题是,我需要调用一个异步任务来在静态类的片段中运行 编译器抱怨“没有可访问的关键字搜索类型的封闭实例” 我曾想过将异步类移出并创建它自己的类,但在异步任务中使用的关键字搜索类中声明的变量太多 如何在不崩溃的情况下执行异步任务 我的列表视图类(片段): 公共静态类ListFragment扩展了片段{ 私有列表视图列表\u列表; 私人懒散适配器adp_列表; private关键字search.SearchTask运

我在我的应用程序中使用actionbar sherlock/fragments

我的问题是,我需要调用一个异步任务来在静态类的片段中运行

编译器抱怨“没有可访问的关键字搜索类型的封闭实例”

我曾想过将异步类移出并创建它自己的类,但在异步任务中使用的关键字搜索类中声明的变量太多

如何在不崩溃的情况下执行异步任务

我的列表视图类(片段):

公共静态类ListFragment扩展了片段{
私有列表视图列表\u列表;
私人懒散适配器adp_列表;
private关键字search.SearchTask运行;
//run.execute();
//新建SearchTask().execute();
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
}
@凌驾
公共空间
{
如果(!RTN_请求等于(“SSDR”)&获取数据){
adp_list.imageLoader.stopThread();
}
list_list.setAdapter(空);
如果(获得数据)
clearCache(true,true);
super.ondestory();
}
@凌驾
公共无效暂停()
{
/*
if(this.getResources().getConfiguration().orientation==Configuration.orientation\u纵向){
list_list.SETNUM列(2);
}else if(this.getResources().getConfiguration().orientation==Configuration.orientation\u横向){
列表(list.setNumColumns)(3);;
}
*/
super.onPause();
}
@凌驾
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
视图v=充气机充气(右布局列表,容器,假);
adp_list=新的LazyAdapter(getActivity(),list_数据,0);
运行=新建搜索任务();
list_list=(ListView)v.findviewbyd(R.id.list);
如果(列表数据!=null){
list_list.setAdapter(adp_list);
list\u list.setOnItemLongClickListener(新的OnItemLongClickListener(){
@凌驾
公共布尔值长单击(AdapterView arg0、视图arg1、int arg2、long arg3){
字符串[]FINAL=列表_数据[arg2]。拆分(“##”);
最终意图d=新意图();
d、 putExtra(“数据”,最终[0]);
d、 setClass(getActivity().getApplicationContext(),Details.class);
星触觉(d);
返回false;
}
});           
list_list.setOnItemClickListener(新的OnItemClickListener(){
@凌驾
公共视图单击(AdapterView arg0、视图arg1、整型arg2、长型arg3)
{
如果(!eno_act){
字符串[]FINAL=列表_数据[arg2]。拆分(“##”);
最终意图i=新意图(意图、行动视图);
i、 setData(Uri.parse(FINAL[1]);
星触觉(i);
}否则{
字符串[]FINAL=列表_数据[arg2]。拆分(“##”);
级别=1;
水平过滤器=最终[2];
run.execute();//这就是它崩溃的地方!!
}
}
});     
}
返回v;
}
}
以及我的SearchTask类:

 class SearchTask extends AsyncTask<Void, Void, String> {

    @Override
    protected void onPreExecute() {
        // TODO Auto-generated method stub
        //....to long to show..
    }

    @Override
    protected String doInBackground(Void... unsued) {
        //....to long to show..
    }

    @Override
    protected void onProgressUpdate(Void... unsued) {
        //....to long to show..
    }

    @Override
    protected void onPostExecute(String sResponse) {
        //....to long to show..
    }
}
class SearchTask扩展了AsyncTask{
@凌驾
受保护的void onPreExecute(){
//TODO自动生成的方法存根
//…渴望展示。。
}
@凌驾
受保护的字符串背景(无效…未指定){
//…渴望展示。。
}
@凌驾
受保护的void onProgressUpdate(void…unseed){
//…渴望展示。。
}
@凌驾
PostExecute上受保护的void(字符串响应){
//…渴望展示。。
}
}

在异步任务类的构造函数中传递关键字搜索类的那些变量

比如说

int foo;   

public SearchTask(int foo)  //your variables here
{
    this.foo = foo;
}
用于传递数据示例

//在异步任务中,您可以在doInBackground或任何其他方法中完成该任务。 让foo作为字符串数组

 Bundle b = new Bundle();
 Intent i = new Intent(context, YourActivity.class)
 b.putExtraStringArray("myStringArray", foo);
 i.putExtras(b);
//在活动中接收此数组作为

 String[] myArray =  this.getIntent().getStringArrayExtra("myStringArray"); //this should be done after executing asyncTask class.

你是说如果我把异步任务移出?这就是我将所有变量传递给async类的方式,对吗?是的,通过这种方式,您可以传递变量并在asyncTask类中的任何位置使用它们。并以
new SearchTask(此处为您的变量)的形式执行async类。execute()如果我想把东西传回去怎么办?传递活动的上下文,然后传递`Toast.makeToast(上下文,“msg”,Toast.LENGTH_LONG).show();但您只能在onPostExcute()中显示它们;方法。
 String[] myArray =  this.getIntent().getStringArrayExtra("myStringArray"); //this should be done after executing asyncTask class.