2017-02-15 59 views
0

解决方法,我要创建一个ArrayAdapter,但是当我把getActivity()到构造它说cannot resolve method getActivity()getActivity不能从片段

 import java.io.BufferedReader; 
     import java.io.IOException; 
     import java.io.InputStreamReader; 
     import java.net.ProtocolException; 
     import java.net.URL; 
     import java.util.ArrayList; 
     import android.widget.ArrayAdapter; 
     import java.net.HttpURLConnection; 
     import java.lang.Void; 
     import android.widget.ListView; 
     import android.os.AsyncTask; 
     import android.content.Context; 


       public class HttpURLConnectionExample extends AsyncTask<ListView, Void, String> { 

        public ListView myList = null; 

        public void sendGet(ListView lv){ 
         myList = lv; 
         this.execute(); 
         return; 
        } 

        @Override 
        protected String doInBackground(ListView... arg0) { 
         String url = "http://192.168.1.9"; 
         URL obj = null; 
         try{ 
          obj = new URL(url);} 
         catch(IOException e){} 
         HttpURLConnection con = null; 
         try{ 
          con = (HttpURLConnection) obj.openConnection();} 
         catch(IOException e){} 

         //con.setRequestProperty("User-Agent", USER_AGENT); 
         try{ 
          con.setRequestMethod("GET");} 
         catch(ProtocolException e){} 
         try{ 
          con.connect();} 
         catch(IOException e){} 
         try{ 
          int responseCode = con.getResponseCode();} 
         catch(IOException e){} 
         BufferedReader in = null; 
         try{ 
          in = new BufferedReader(
            new InputStreamReader(con.getInputStream()));} 
         catch(IOException e){} 
         String inputLine; 
         StringBuffer response = new StringBuffer(); 
         try{ 
          while ((inputLine = in.readLine()) != null) { 
           response.append(inputLine); 
          }} 
         catch(IOException e){} 
         try{ 
          in.close();} 
         catch(IOException e){} 
         //print result 
         System.out.println(response.toString()); 
         return response.toString(); 
        } 

        @Override 
        protected void onPostExecute(String result) { 
         String strParts[] = result.split("@"); 
         ArrayList<dispencer> listAr = new ArrayList<dispencer>(); 
         for(int i=0; i<strParts.length; i++){ 
          listAr.add(new dispencer(strParts[i])); 
         } 

         final ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_expandable_list_item_1); 

         for (int i = 0; i < listAr.size(); ++i) { 
          adapter.add(listAr.get(i).toString()); 
         } 
         myList.setAdapter(adapter); 
         return ; 
        } 

      } 

我读我不得不使用getActivity方法,因为我在我片段,而不是在上下文中。 编辑我coudn't扩展我的MainActivity类,因为这个类已经扩展asyncTask。

+0

显示你的文件,你的类是否扩展了Fragment类?您的导入中包含片段类是否正确? –

+0

你不在片段中,你在AsyncTask中,它不是上下文,也没有getActivity()方法 – X3Btel

回答

0

您没有延伸片段类。所以你需要做以下事情。

当你想在asynctask类中使用上下文时,你需要在类的构造函数中传递上下文。

例如

public class MyCustomTask extends AsyncTask<Void, Void, Long> { 

private Context mContext; 

public MyCustomTask (Context context){ 
    mContext = context; 
} 

//other methods like onPreExecute etc. 
protected void onPostExecute(Long result) { 
    Toast.makeText(mContext,"Its working", Toast.LENGTH_LONG).show(); 
} } 

,并按照实例化类。

MyCustomTask task = new MyCustomTask(context); 
task.execute(..); 
0

首先确保你已经导入了Fragment类,并且将它扩展为片段。 限定与第一类型的可变

Context mContext ; 

然后该变量初始与getActivity(这个可变的)类似这样的

mContext=getActivity(); 

通到您的适配器

final ArrayAdapter<String> adapter = new ArrayAdapter<String>(mContext, android.R.layout.simple_expandable_list_item_1); 
+0

我相信将它保存在一个变量中,然后使用它将没有什么区别。最后,相同的值最终会作为适配器的参数。 –

+0

你的类没有扩展Fragment类,所以getActivity()将无效@KetanMalhotra –

+0

“你的”?我没有问这个问题。我在你作为对Raffa(OP)的评论之前也曾这样建议过。我的意思是将getActivity()的值保存到变量中并不能解决问题。 –

0

你是在扩展AsyncTaskFragment类,传递一个ContextActivity参考而不是构造函数:

public MyTask(Context context)并存储在你的任务,它的参考。

相关问题