我目前正在設計我的android應用程序的消息選項卡,並且我收到了消息活動以在列表視圖中顯示所有用戶的消息。每個listitem顯示發送消息的人的名稱和消息的主題。在兩個隱藏的文本框中,我附加了發件人的ID和郵件的ID。它可以正常工作,因爲我可以看到它。但是,我試圖在長時間按下後刪除消息。但是會發生什麼呢,當我得到後臺進程的運行時,基本上會向服務器發送要刪除的消息的ID,我意識到對於每個列表項我只發送第一個消息的ID。如果我點擊任何其他項目,它仍然顯示第一個消息ID。我真的不知道我做錯了什麼。這就是我所做的。取回創建每個listitem上創建的每個項目的ID
public class MyMessages extends ListActivity {
ArrayList<HashMap<String, String>> messages = new ArrayList<HashMap<String, String>>();
JSONParser jsonParser=new JSONParser();
public static String url_messages="...";
public static String url_delete_message="...";
public String theMessage;
public String mid;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my_messages);
new readMessages().execute();
ListView lv= getListView();
registerForContextMenu(lv);
lv.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
String message=((TextView) arg1.findViewById(R.id.rMessage)).getText().toString();
String name=((TextView) arg1.findViewById(R.id.sentName)).getText().toString();
String theirId=((TextView) arg1.findViewById(R.id.pid)).getText().toString();
Intent in= new Intent(getApplicationContext(), ReadMessage.class);
Bundle extras=new Bundle();
extras.putString("name",name);
extras.putString("message", message);
extras.putString("pid", theirId);
in.putExtras(extras);
//in.putExtra("picture", picture);
startActivityForResult(in, 100);
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.my_messages, menu);
return true;
}
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.my_messages, menu);
}
public boolean onContextItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.delete_message:
// app icon in action bar clicked; go home
//SaveSharedPreference.setUserName(TabExercise.this,"");
new deleteMessage().execute();
// Intent intent = new Intent(this, TabExercise.class);
// intent.putExtra("tab_index","2");
// intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
// startActivity(intent);
return true;
default:
return super.onOptionsItemSelected(item);
}
}
class readMessages extends AsyncTask<String, String, String>{
@Override
protected String doInBackground(String... params) {
// TODO Auto-generatNameValuePairb
List<NameValuePair>param=new ArrayList<NameValuePair>();
param.add(new BasicNameValuePair("id","4")); //SaveSharedPreference.getUserId(MyMessages.this)
JSONObject json=jsonParser.makeHttpRequest(url_messages, "POST", param);
Log.d("My messages", json.toString());
try {
JSONArray array = json.getJSONArray("messages");
Log.d("Messages length",Integer.toString(array.length()));
//if(array.length()==0)
//Log.d("Messages?","No Messages");
//if(array.length()>0){
for (int i = 0; i < array.length(); i++) {
// Log.i("name", array.getJSONObject(i).getString("name"));
JSONObject c = array.getJSONObject(i);
// Storing each json item in variable
String id = c.getString("sender_id");
String name = c.getString("sender_name");
String subject=c.getString("subject");
theMessage=c.getString("message");
mid=c.getString("message_id");
//Log.i("Message Ids", mid);
// creating new HashMap
HashMap<String, String> map = new HashMap<String, String>();
// adding each child node to HashMap key => value
map.put("contact_id", id);
map.put("sender_name", name);
map.put("subject", subject);
map.put("message", theMessage);
map.put("message_id", mid);
// adding HashList to ArrayList
messages.add(map);
}
/* }else{
runOnUiThread(new Runnable() {
public void run() {
TextView tx=(TextView)findViewById(R.id.nocontacts);
tx.setVisibility(0);
}
});
}*/
}catch (Exception e) {
e.printStackTrace();
}
return null;
}
protected void onPostExecute(String file_url) {
// dismiss the dialog after getting all products
// updating UI from Background Thread
runOnUiThread(new Runnable() {
public void run() {
ListAdapter adapter = new SimpleAdapter(
MyMessages.this, messages,
R.layout.list_all_messages, new String[] { "contact_id","sender_name", "subject", "message", "message_id"},
new int[] { R.id.pid, R.id.sentName, R.id.recMessage, R.id.rMessage, R.id.mid });
// updating listview
setListAdapter(adapter);
}
});
}
}
class deleteMessage extends AsyncTask<String, String, String>{
String theirName=((TextView) findViewById(R.id.sentName)).getText().toString();
String messageId=((TextView) findViewById(R.id.mid)).getText().toString();
String theirId=((TextView) findViewById(R.id.pid)).getText().toString();
@Override
protected String doInBackground(String... params) {
// TODO Auto-generatNameValuePairb
//List<NameValuePair>param=new ArrayList<NameValuePair>();
//param.add(new BasicNameValuePair("id","4")); //SaveSharedPreference.getUserId(MyMessages.this)
//param.add(new BasicNameValuePair("mid",messageId));
//JSONObject json=jsonParser.makeHttpRequest(url_delete_message, "POST", param);
Log.d("Message Id", messageId);
Log.d("Their name", theirName);
Log.d("Their Id", theirId);
//Log.d("Message status", json.toString());
return null;
}
protected void onPostExecute(String file_url) {
// dismiss the dialog after getting all products
// updating UI from Background Thread
runOnUiThread(new Runnable() {
public void run() {
//new readNotifications().execute();
}
});
}
}
}
這是我用來獲取每個消息的ID上缺失的的AsyncTask
String messageId=((TextView) findViewById(R.id.mid)).getText().toString();
我覺得,這可能是問題,因爲也許它只返回ID的聲明的第一份名單。