我有一个Asynctask,通过JSON方法收集评论。然后它将注释放入一个放在listView中的String [],问题是扩展BaseAdapter的类给了我一个错误并且不让我使用它?数字被认为是一个字符串!不是int。这是我目前的代码,
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 :(得分:0)
在方法getView,getCount,getItem,getItemId之前,适配器中缺少@Override注释。
我建议你在AsyncTask类方法之外安装适配器类。你的代码真的难以理解。它看起来像这样:
class LoadComments extends AsyncTask<JSONObject, String, JSONObject> {
// code here
}
class DataListAdapter extends BaseAdapter {
// code here
}
类应始终以大写(LoadComments类no loadComments)开头,变量始终以小写(String name no String Name)开头。也许我不应该在这里写它,但它对你有用,让你的代码更容易阅读:)