Android 在服务器响应上动态地从Listview添加更新和删除项

Android 在服务器响应上动态地从Listview添加更新和删除项,android,listview,android-asynctask,Android,Listview,Android Asynctask,嗨,我不知道是否要问正确的问题,但我想在Facebook上发表评论,更新评论和删除评论 当我添加注释时,它将向服务器发送请求,并用新值给出响应以填写listadapter,在单击enter或add按钮后,更改可能会出现在我的listview上,而在delete上,它将向服务器发送请求并作为响应填写我的listadapter。更改可能会出现在我的listview上,而不会刷新listview。如何执行此操作 先谢谢你 这是我的课。 public class CommmentActivity ext

嗨,我不知道是否要问正确的问题,但我想在Facebook上发表评论,更新评论和删除评论

当我添加注释时,它将向服务器发送请求,并用新值给出响应以填写listadapter,在单击enter或add按钮后,更改可能会出现在我的listview上,而在delete上,它将向服务器发送请求并作为响应填写我的listadapter。更改可能会出现在我的listview上,而不会刷新listview。如何执行此操作

先谢谢你

这是我的课。

public class CommmentActivity extends Activity{



DatabaseHandler db = new DatabaseHandler(this);
List<CommentListInfo> list_CommentInfo = new ArrayList<CommentListInfo>();
List<String> SuggetionList;
AutoCompleteTextView aCompletView;
EditText etComment;
String strComment;
ArrayAdapter<String> mentionList;
ListCommentAdapter commentAdapter;
ImageView IvAddComment;
ListView CommentList;
SessionCreator m_session;
boolean m = false;

boolean mBuzy;

int FirstPosition;
int ItemCounted;
int CurrentScrollState;
int TotalItemCount;

String UserId;
String VidoId;

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.commentvideo_main);


    SuggetionList =  new ArrayList<String>();
    String Curl = GlobalMethod.TokenGenerator() + "&action=getCommentsVideo";

    Intent data = getIntent();
    UserId = data.getStringExtra("userId");
    VidoId = data.getStringExtra("videoId");
    init();

    String strfriendsSyncDate = m_session.getfriendsSyncDate();

    Log.d("mData", strfriendsSyncDate);




    new CommentsDetail().execute(UserId,VidoId,strfriendsSyncDate,Curl,"1");


    commentAdapter = new ListCommentAdapter(getApplicationContext(), list_CommentInfo);
        CommentList.setAdapter(commentAdapter); 

    CommentList.setOnScrollListener(new OnScrollListener() {

        @Override
        public void onScrollStateChanged(AbsListView view, int scrollState) {
            // TODO Auto-generated method stub

            switch (scrollState) {
            case OnScrollListener.SCROLL_STATE_IDLE:{
                commentAdapter.notifyDataSetChanged();
                //ManipulateVisibleView(view);
                break;
            }

            case OnScrollListener.SCROLL_STATE_TOUCH_SCROLL:
            {
                mBuzy = true;
                break;
            }

            case OnScrollListener.SCROLL_STATE_FLING:{
                mBuzy = true;
                break;
            }


            default:
                break;
            }
        }



        @Override
        public void onScroll(AbsListView view, int firstVisibleItem,
                int visibleItemCount, int totalItemCount) {
            // TODO Auto-generated method stub
            FirstPosition = firstVisibleItem;
            ItemCounted = visibleItemCount;
            TotalItemCount = totalItemCount;
            int LastPosition = view.getLastVisiblePosition();
            Log.d("First Position", ""+FirstPosition);
            Log.d("ItemCountes",""+ItemCounted);
            Log.d("totalItemCount",""+TotalItemCount);
            Log.d("LastPosition",""+LastPosition);


            if(visibleItemCount!=0 && ((firstVisibleItem+visibleItemCount)>=(totalItemCount))){

            Log.d("mCalled", "call");
            }
        isScrollCompleted();
        }
    });



IvAddComment.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            strComment = etComment.getText().toString();
            etComment.getText().clear();
            String strUrl = GlobalMethod.TokenGenerator() + "&action=addCommentsVideo";

            new CommentsDetail().execute(UserId,VidoId,strComment,strUrl,"0");
            commentAdapter.notifyDataSetChanged();
        }
    });



}
private void isScrollCompleted(){
if(this.ItemCounted >0 && this.CurrentScrollState == OnScrollListener.SCROLL_STATE_IDLE){
    Log.d("ItemCounted",""+ItemCounted);
    Log.d("CurrentScrollState",""+CurrentScrollState);
}   
}

private void init() {
    // TODO Auto-generated method stub
    m_session = new SessionCreator(getApplicationContext());
    etComment = (EditText)findViewById(R.id.etComments);
    CommentList = (ListView)findViewById(R.id.lvLatestComments);
    IvAddComment = (ImageView)findViewById(R.id.addComment);
}

public class CommentsDetail extends AsyncTask<String, String, String>{

    @Override
    protected String doInBackground(String... params) {
        // TODO Auto-generated method stub


        ServiceHandler serviceClient;
        String mJsonString;

        try{

            String userId = (String)params[0];
            String vId = (String)params[1];
            if(params[4].equals("0")){


                String comment = (String)params[2];
                String strUrl = (String)params[3];

                List<NameValuePair> paramsNameValuePairs = new ArrayList<NameValuePair>();

                paramsNameValuePairs.add(new BasicNameValuePair("userId", userId));
                paramsNameValuePairs.add(new BasicNameValuePair("videoId", vId));
                paramsNameValuePairs.add(new BasicNameValuePair("commentText", comment));

                serviceClient = new ServiceHandler();
                mJsonString = serviceClient.makeServiceCall(strUrl,
                        ServiceHandler.POST, paramsNameValuePairs);

                Log.i("---->>>>>>>>>>", paramsNameValuePairs + "");
            }else{

                String syncdate = (String)params[2];
                String strUrl = (String)params[3];

                List<NameValuePair> paramsNameValuePairs = new ArrayList<NameValuePair>();

                paramsNameValuePairs.add(new BasicNameValuePair("userId", userId));
                paramsNameValuePairs.add(new BasicNameValuePair("videoId", vId));
                paramsNameValuePairs.add(new BasicNameValuePair("friendsSyncDate", syncdate));

                serviceClient = new ServiceHandler();
                mJsonString = serviceClient.makeServiceCall(strUrl,
                        ServiceHandler.POST, paramsNameValuePairs);

                Log.i("---->>>>>>>>>>", paramsNameValuePairs + "");
            }



        Log.d("Response Json-----------------------",mJsonString );


        return mJsonString;

    }catch (Exception e) {
        e.getStackTrace();
    }

    return null;
    }

    @SuppressWarnings({ "unchecked", "unchecked", "unchecked" })
    @Override
    protected void onPostExecute(String result) {
        // TODO Auto-generated method stub
        super.onPostExecute(result);


        try{
        if (result != null) {
            JSONObject responsJsonObj = new JSONObject(result);
            JSONObject jsonObj = (JSONObject) responsJsonObj
                    .optJSONObject("data");

            try {
                String str = jsonObj.getString("error");
                if ( str != null || str.length() != 0) {
                    // error
                    //Toast.makeText(NewsfeedActivity.this, jsonObj.getString("error"),Toast.LENGTH_LONG).show();
                    return;
                }
            } catch (JSONException je) {
                Log.d("jex ------>", "" + je.getMessage());
                try {
                    String str = jsonObj.getString("message");
                    Log.d("message=", "" + str);
                    if ( str != null || str.length() != 0) {
                        // VALID RESPONSE, NOW PARSE IT
                        if (jsonObj.has("comments")) {
                            JSONArray colArray = jsonObj.getJSONArray("comments");
                            Log.d("Colunm Array", ""+colArray);
                            int nComments = colArray.length();
                            Log.d("# comments", "" + nComments);
                            for(int i=0; i<nComments; i++){
                                JSONObject obj = colArray.getJSONObject(i);
                                Gson Comments = new Gson();
                                String strComments = Comments.toJson(obj);
                                Log.d("# obj=", "" + obj.toString());               
                                CommentListInfo cmtInfo = new CommentListInfo();                
                                cmtInfo.c_userId = obj.getString("userId");
                                cmtInfo.c_name = obj.getString("name");
                                cmtInfo.DateAdded = obj.getString("dateAdded");
                                cmtInfo.CommentId = obj.getString("commentId");
                                cmtInfo.CommentText = obj.getString("text");
                                cmtInfo.ImageUrl = obj.getString("imageLink");
                                list_CommentInfo.add(cmtInfo);  
                            }
                        }
                    }

                    if ( str != null || str.length() != 0) {
                        // VALID RESPONSE, NOW PARSE IT
                        if (jsonObj.has("addPosition")) {
                                Log.d("# obj=", "" + jsonObj.toString());   
                                Log.d("Add Position", jsonObj.getString("addPosition"));
                        }
                    }

//                      
                    if ( str != null || str.length() != 0) {
                        // VALID RESPONSE, NOW PARSE IT
                        if (jsonObj.has("friendsSyncDate")) {
                            Log.d("# friendsDeleted", "" + jsonObj);
                                Log.d("# obj=", "" + jsonObj.toString());   

                                String myString = m_session.getfriendsSyncDate();
                                Log.d("myString", myString);

                                m_session.putfriendsSyncDate(jsonObj.getString("friendsSyncDate"));
                                Log.d("Sync Date "," "+jsonObj.getString("friendsSyncDate"));
                        }
                    }

                } catch (JSONException je2) {
                    je2.printStackTrace();
                }
            }
        }
    } catch (Exception e) {
        e.printStackTrace();
    }

    }

   }

 }
public class ListCommentAdapter extends BaseAdapter{

private Context mContext;
private List<CommentListInfo> CommentsInfo;
private LayoutInflater inflater;
private String szUserId;
private String szVideoID;

private boolean mBuzy = false;



public ListCommentAdapter(Context context, List<CommentListInfo> cmtInfo) {
    // TODO Auto-generated constructor stub
    mContext = context;
    CommentsInfo = cmtInfo;
    AppData mmap = (AppData)this.mContext.getApplicationContext();
    szUserId = mmap.getUserId();
}

@Override
public int getCount() {
    // TODO Auto-generated method stub
    return CommentsInfo.size();
}

@Override
public Object getItem(int position) {
    // TODO Auto-generated method stub
    return CommentsInfo.get(position);
}

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

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    // TODO Auto-generated method stub
    Holder holder = new Holder();


    CommentListInfo c = CommentsInfo.get(position);


    try{

        Log.i("nUserId", c.c_userId);
        Log.i("nName", c.c_name);
        Log.i("nCommentId", c.CommentId);
        Log.i("nCommnet", c.CommentText);
        Log.i("nImageUrl",c.ImageUrl);

    }catch(Exception e){
        Log.e("Erore is",""+e);
    }


    try{
            if(inflater==null){
                inflater = (LayoutInflater)mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            }

            if(convertView==null){
                convertView = inflater.inflate(R.layout.comment_list_item, null);
                holder.ciProfileImage = (CircleImageView)convertView.findViewById(R.id.civCFLeftPic);
                holder.tvComments = (TextView)convertView.findViewById(R.id.tvCommentbox);
                holder.tvCDate = (TextView)convertView.findViewById(R.id.tvCfNotifyDate);
                holder.tvName = (TextView)convertView.findViewById(R.id.tvCommentName);
                convertView.setTag(holder);
            }else{
                holder = (Holder)convertView.getTag();
            }


            if(!mBuzy){

                RemoteImageLoader task = new RemoteImageLoader();
                task.setImageView(holder.ciProfileImage);
                task.execute(c.ImageUrl);

                Log.d("ImagerUrl", c.ImageUrl);
                if(c.ImageUrl!=null){
                    Picasso.with(mContext)
                    .load(R.drawable.world1)
                    .placeholder(R.drawable.world1)
                    .error(R.drawable.world1)
                    .into(holder.ciProfileImage);

                }else{
                    Picasso.with(mContext)
                    .load(R.drawable.world1)
                    .placeholder(R.drawable.world1)
                    .error(R.drawable.world1)
                    .into(holder.ciProfileImage);
                }
            holder.tvComments.setText(c.CommentText);
            holder.tvCDate.setText(c.DateAdded);
            holder.tvName.setText(c.c_name);
            holder.tvComments.setTag(null);

            }else{
                holder.tvComments.setText("Loading...");
                holder.tvComments.setTag(this);
            }

            return convertView;
        }catch(Exception e){
            System.out.println("Error IS :- "+ e);
        }

    return convertView;
}

private static class Holder{
    private TextView tvName,tvComments,tvCDate;
    private CircleImageView ciProfileImage;     
 }
}
公共类CommmentActivity扩展活动{
DatabaseHandler db=新的DatabaseHandler(此);
List\u CommentInfo=new ArrayList();
列表建议列表;
自动完成文本视图一个完整视图;
编辑文本和评论;
字符串字符串;
ArrayAdapter列表;
ListCommentAdapter-commentAdapter;
ImageView-IvAddComment;
列表视图注释列表;
会话创建者m_会话;
布尔m=假;
布尔姆布齐;
int第一位置;
整数项计数;
int当前状态;
整数TotalItemCount;
字符串用户标识;
线状摄像机;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
//TODO自动生成的方法存根
super.onCreate(savedInstanceState);
setContentView(R.layout.commentvideo_main);
SuggetionList=newArrayList();
字符串Curl=GlobalMethod.TokenGenerator()+“&action=getCommentsVideo”;
Intent data=getIntent();
UserId=data.getStringExtra(“UserId”);
VidoId=data.getStringExtra(“videoId”);
init();
字符串strfriendsSyncDate=m_session.getfriendsSyncDate();
Log.d(“mData”,strfriendsSyncDate);
新的commentsdeail().execute(UserId,VidoId,strfriendsSyncDate,Curl,“1”);
commentAdapter=新的ListCommentAdapter(getApplicationContext(),list\u CommentInfo);
setAdapter(commentAdapter);
setOnScrollListener(新的OnScrollListener(){
@凌驾
公共无效onScrollStateChanged(AbsListView视图,int scrollState){
//TODO自动生成的方法存根
开关(滚动状态){
案例OnScrollListener.SCROLL\u STATE\u IDLE:{
commentAdapter.notifyDataSetChanged();
//可操作视图(视图);
打破
}
案例OnScrollListener.SCROLL\u STATE\u TOUCH\u SCROLL:
{
mBuzy=true;
打破
}
案例OnScrollListener.SCROLL\u STATE\u FLING:{
mBuzy=true;
打破
}
违约:
打破
}
}
@凌驾
public void onScroll(AbsListView视图,int firstVisibleItem,
int visibleItemCount,int totalItemCount){
//TODO自动生成的方法存根
FirstPosition=firstVisibleItem;
ItemCounted=visibleItemCount;
TotalItemCount=TotalItemCount;
int LastPosition=view.getLastVisiblePosition();
Log.d(“第一位置”,“第一位置”);
Log.d(“ItemCountes”和“+ItemCounted”);
Log.d(“totalItemCount”,“totalItemCount+totalItemCount”);
Log.d(“LastPosition”,即“+LastPosition”);
如果(visibleItemCount!=0&((firstVisibleItem+visibleItemCount)>=(totalItemCount))){
Log.d(“mCalled”、“call”);
}
IsCrollCompleted();
}
});
setOnClickListener(新的OnClickListener(){
@凌驾
公共void onClick(视图v){
//TODO自动生成的方法存根
strComment=etComment.getText().toString();
etComment.getText().clear();
字符串strUrl=GlobalMethod.TokenGenerator()+“&action=addCommentsVideo”;
newcommentsdeail().execute(UserId,VidoId,strComment,strUrl,“0”);
commentAdapter.notifyDataSetChanged();
}
});
}
私有无效IsCrollCompleted(){
if(this.ItemCounted>0&&this.CurrentScrollState==OnScrollListener.SCROLL\u STATE\u IDLE){
Log.d(“ItemCounted”,“ItemCounted+ItemCounted”);
Log.d(“CurrentScrollState”,即“+CurrentScrollState”);
}   
}
私有void init(){
//TODO自动生成的方法存根
m_session=newsessionCreator(getApplicationContext());
etComment=(EditText)findViewById(R.id.etComments);
CommentList=(ListView)findViewById(R.id.lvLatestComments);
IvAddComment=(ImageView)findViewById(R.id.addComment);
}
公共类CommentsDetail扩展了AsyncTask{
@凌驾
受保护的字符串doInBackground(字符串…参数){
//TODO自动生成的方法存根
ServiceHandler服务客户端;
字符串mJsonString;
试一试{
字符串userId=(字符串)参数[0];
字符串vId=(字符串)参数[1];
if(参数[4]。等于(“0”)){
字符串注释=(字符串)参数[2];
字符串strUrl=(字符串)参数[3];
List paramsNameValuePairs=新ArrayList();
添加(新的BasicNameValuePair(“userId”,userId));
添加(新的BasicNameValuePair(“videoId”,vId));
添加(新的BasicNameValuePair(“commentText”,comment));
serviceClient=新的ServiceHandler();
mJsonString=serviceClient.makeServiceCall(strUrl,
ServiceHandler.POST,paramsNameValuePairs);
Log.i(“---->>>>>>>”,paramsNameValuePairs+”);
}否则{
字符串syncdate=(字符串)参数[2];
字符串strUrl=(字符串)参数[3];
List paramsNameValuePairs=新ArrayList();
添加(新的BasicNameValuePair(“userId”,userId));
添加(新的BasicNameValuePair(“videoId”,vId));
添加(新的BasicNameValuePair(“fri
public void myAdaperMethod(Context context, List<CommentListInfo>      list_CommentInfo){
commentAdapter = new ListCommentAdapter(this, list_CommentInfo);
CommentList.setAdapter(commentAdapter);
CommentList.setOnScrollListener(new OnScrollListener(){...}
}

onCreate{
myAdapterMethod(...);
}

post{...}
get{myAdapterMethod(...);}