0

У меня есть Asynctask, которая собирает комментарии через метод JSON. Затем он помещает комментарии в String [], который помещается в listView, проблема в том, что класс, расширяющий BaseAdapter, дает мне ошибку и не позволяет мне использовать его? Число должно быть строкой! Не int. Вот мой текущий код,Класс BaseAdapter не работает - Android

class loadComments extends AsyncTask<JSONObject, String, JSONObject> { 
      private ArrayAdapter<String> mAdapter = null; 

      @Override 
      protected void onPreExecute() { 
       super.onPreExecute(); 


      } 

      @Override 
      protected void onProgressUpdate(String... values) { 
       super.onProgressUpdate(values); 

      } 

      protected JSONObject doInBackground(JSONObject... params) { 


       JSONObject json2 = CollectComments.collectComments(usernameforcomments, offsetNumber); 


        return json2; 



      } 

      @Override 
      protected void onPostExecute(JSONObject json2) { 
       try { 
        if (json2.getString(KEY_SUCCESS) != null) { 
         registerErrorMsg.setText(""); 
         String res2 = json2.getString(KEY_SUCCESS); 
         if(Integer.parseInt(res2) == 1){ 
          l1=(ListView)findViewById(R.id.list); 


          JSONArray commentArray = json2.getJSONArray(KEY_COMMENT); 
          final String comments[] = new String[commentArray.length()]; 
          for (int i=0; i<commentArray.length(); i++) { 
           comments[i] = commentArray.getString(i); 
          } 
          JSONArray numberArray = json2.getJSONArray(KEY_NUMBER); 
          String numbers[] = new String[numberArray.length()]; 
          for (int i=0; i<numberArray.length(); i++) { 
           numbers[i] = numberArray.getString(i); 
          } 
          JSONArray usernameArray = json2.getJSONArray(KEY_USERNAME); 
          String usernames[] = new String[usernameArray.length()]; 
          for (int i=0; i<usernameArray.length(); i++) { 
           usernames[i] = usernameArray.getString(i); 
          } 


          l1.setAdapter(new dataListAdapter(comments,numbers,usernames)); 


          class dataListAdapter extends BaseAdapter { 
           String[] Comment, Username, number ; 


           dataListAdapter() { 
            Comment = null; 
            Username = null; 
            number = null; 
           } 

           public dataListAdapter(String[] text, String[] text1,String[] text3) { 
            Comment = text; 
            Username = text1; 
            number = text3; 

           } 

           public int getCount() { 
            // TODO Auto-generated method stub 
            return Comment.length; 
           } 

           public Object getItem(int arg0) { 
            // TODO Auto-generated method stub 
            return null; 
           } 

           public long getItemId(int position) { 
            // TODO Auto-generated method stub 
            return position; 
           } 

           public View getView(int position, View convertView, ViewGroup parent) { 

            LayoutInflater inflater = getLayoutInflater(); 
            View row; 
            row = inflater.inflate(R.layout.list_item, parent, false); 
            TextView listComment, listnumber, listUsername; 

            listComment = (TextView) row.findViewById(R.id.listComment); 
            listnumber = (TextView) row.findViewById(R.id.listNumber); 
            listUsername=(TextView)row.findViewById(R.id.listPostedBy); 
            listComment.setText(Comment[position]); 
            listnumber.setText(number[position]); 
            listUsername.setText(Username[position]); 

            return (row); 
           } 
          } 









          }//end if key is == 1 
         else{ 
          // Error in registration 
          registerErrorMsg.setText(json2.getString(KEY_ERROR_MSG)); 
         }//end else 
        }//end if 
       } //end try 

       catch (JSONException e) { 
        e.printStackTrace(); 
       }//end catch  
      } 
     } 


     new loadComments().execute(); 

Я получаю ошибку

The type dataListAdapter must implement the inherited abstract method Adapter.getView(int, View, ViewGroup) 

ответ

0

В адаптере отсутствует @Override аннотации перед тем методами GetView, GetCount, GetItem, getItemId.

И я предлагаю вам иметь класс адаптера вне метода класса AsyncTask. Вы действительно не читаете код. Он shold выглядеть следующим образом:

class LoadComments extends AsyncTask<JSONObject, String, JSONObject> { 
    // code here 
} 

class DataListAdapter extends BaseAdapter { 
    // code here 
} 

И классы всегда должны начинаться с прописной (LoadComments класса не loadComments) и переменные всегда с нижнего регистра (имя Струнный нет String Name). Может быть, мне не стоит писать здесь, но вам будет полезно, чтобы сделать код более удобным для чтения :)

+0

Но он должен быть внутри асинтезы, потому что асинтеза - это то, что получает строки? –

+0

Вы передаете исходные данные (String [] Comment, Username, number) в адаптер через конструктор, поэтому не нужно иметь класс адаптера в методе async-задачи. – koso

+0

Как передать данные адаптеру? –

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