2017-02-15 61 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)並存儲在你的任務,它的參考。

相關問題