2017-02-15 3 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, так как я нахожусь в фрагмент, а не в контексте. EDIT я не могу расширить свой класс MainActivity, потому что этот класс уже расширяет asyncTask.

+0

Показать свой файл, расширяет класс класса Fragment? У вас есть класс 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

Прежде всего убедитесь, что вы импортировали класс фрагмента и сделали его фрагмент. определить переменную с типом

Context mContext ; 

затем парафировать эту переменную getActivity(), как этот

mContext=getActivity(); 

перевале эту переменную в свой адаптер

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

Я считаю, что он сохраняет его в переменной, а затем его использование не изменит ситуацию. В конце концов, такое же значение заканчивается как аргумент адаптера. –

+0

ваш класс не расширяет класс фрагмента, поэтому getActivity() будет недействительным @KetanMalhotra –

+0

«ваш»? Я не задавал этот вопрос. Я предложил то же самое перед вами, как комментарий Раффе (OP). Я просто имел в виду, что сохранение значения getActivity() для переменной не решит проблему. –

0

Вы расширяете AsyncTaskFragment не класс, пройти Context или Activity ссылку конструктору вместо:

public MyTask(Context context) и хранить ссылку на него в вашей задаче.

Смежные вопросы