【发布时间】:2014-11-07 09:46:24
【问题描述】:
这个问题被问了很多次,但我没有得到我的实际解决方案,因为 ArrayList 在 HashMap 中,所以 我无法在 ListView 中添加文本。我进行了一次聊天,在那里我得到了所有聊天消息的结果,但是当我发送短信时,它排在最前面,但是当我回去再次来时,它以正确的方式出现。所以我的问题是,当我添加任何文本时,它不会最后出现或出现在文本视图中。
//Here is my class
public class ChatScreenActivity extends Activity{
static ArrayList messages = new ArrayList<messageArray>();
ListView list;
Button sendmsg;
EditText usertext;
ProgressDialog mProgressDialog;
ArrayList<HashMap<String, String>> arraylist;
private static String sendmsgurl = "http://www.get2love.webitexperts.com/sendmessage";
private static String msgdetailurl = "http://www.get2love.webitexperts.com/getChatDetails";
JSONParser jsonParser = new JSONParser();
ChatMessageListAdapter adapter;
ActionBar actionBar;
/*ArrayList<String> al=new ArrayList<String>();
ArrayAdapter<String> arrayAdapter=new ArrayAdapter<String>(getApplicationContext(), android.R.layout.simple_list_item_1,al);
*/
@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
arraylist=new ArrayList<HashMap<String,String>>();
new messagedetaillist().execute();
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.chatscreenctivity);
Intent intent= getIntent();
String sender_username=intent.getExtras().getString("User_Name");
list = (ListView) findViewById(R.id.listview1);
list.setCacheColorHint(Color.TRANSPARENT);
list.setDivider(null);
usertext=(EditText)findViewById(R.id.et_sent_msg);
sendmsg=(Button)findViewById(R.id.bt_sent_msg);
actionBar=getActionBar();
actionBar.show();
actionBar.setTitle(sender_username);
actionBar.setSubtitle("messages");
sendmsg.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
new sendmessage().execute();
}
});
}
class sendmessage extends AsyncTask<Void, Void, Void> {
int flag;
@Override
protected void onPreExecute() {
super.onPreExecute();
mProgressDialog = new ProgressDialog(ChatScreenActivity.this);
mProgressDialog.setMessage("Loading...");
mProgressDialog.setIndeterminate(false);
mProgressDialog.show();
}
@Override
protected Void doInBackground(Void... args0) {
arraylist = new ArrayList<HashMap<String, String>>();
List<NameValuePair> params = new ArrayList<NameValuePair>();
HashMap<String, String> map = new HashMap<String, String>();
UserModel user=(UserModel)getIntent().getSerializableExtra("User");
String User_id=String.valueOf(user.getUser_Id());
String message=usertext.getText().toString();
Intent intent= getIntent();
String sender_id=intent.getExtras().getString("Sender_id");
params.add(new BasicNameValuePair("SenderUserID",User_id));
params.add(new BasicNameValuePair("ChatText",message));
params.add(new BasicNameValuePair("ReceiverID",sender_id));
ServiceHandler sh = new ServiceHandler();
JSONObject json = jsonParser.makeHttpRequest(sendmsgurl,"POST", params);
Log.d("Create Response", json.toString());
try
{
if(json!=null)
{
if(json.has("status"))
{
String status=json.getString("status");
if(status.equals("Success"))
{
flag=1;
map.put("Chat_Text",message);
map.put("Receiver_User_Id", sender_id);
map.put("User_Id", User_id);
arraylist.add(map);
}
}
else
{
flag=0;
}
}
}
catch(Exception e)
{
e.printStackTrace();
}
return null;
}
protected void onPostExecute(Void args) {
if(flag==1)
{
Toast.makeText(getApplicationContext(), "Succesfully send", Toast.LENGTH_SHORT).show();
ChatMessageListAdapter adapter = new ChatMessageListAdapter(ChatScreenActivity.this, arraylist);
list.setAdapter(adapter);
mProgressDialog.dismiss();
}
else
{
Toast.makeText(getApplicationContext(), "Failed registered ", Toast.LENGTH_SHORT).show();
}
}
}
class messagedetaillist extends AsyncTask<Void, Void, Void>
{
@Override
protected void onPreExecute() {
super.onPreExecute();
mProgressDialog = new ProgressDialog(ChatScreenActivity.this);
mProgressDialog.setMessage("Loading...");
mProgressDialog.setIndeterminate(false);
mProgressDialog.show();
}
@Override
protected Void doInBackground(Void... args0)
{
arraylist = new ArrayList<HashMap<String, String>>();
List<NameValuePair> params = new ArrayList<NameValuePair>();
UserModel user=(UserModel)getIntent().getSerializableExtra("User");
String User_id=String.valueOf(user.getUser_Id());
Intent intent= getIntent();
String sender_id=intent.getExtras().getString("Sender_id");
params.add(new BasicNameValuePair("SenderUserID",sender_id));
params.add(new BasicNameValuePair("ReceiverID",User_id));
ServiceHandler sh = new ServiceHandler();
String jsonStr = sh.makeServiceCall(msgdetailurl, ServiceHandler.POST, params);
Log.d("Response: ", "> " + jsonStr);
if (jsonStr.length()>0) {
try {
// Locate the array name in JSON
JSONArray contacts = new JSONArray(jsonStr);
for (int i = 0; i < contacts.length(); i++) {
HashMap<String, String> map = new HashMap<String, String>();
JSONObject c = contacts.getJSONObject(i);
String messages=c.getString("Chat_Text");
String SenderId=c.getString("Receiver_User_Id");
map.put("Chat_Text",messages);
map.put("Receiver_User_Id", SenderId);
map.put("User_Id", User_id);
// map.put("TempUser_Image", USer_Image);
// Set the JSON Objects into the array
arraylist.add(map);
}
}
catch (JSONException e) {
Log.e("Error", e.getMessage());
e.printStackTrace();
}
}else {
Log.e("ServiceHandler", "Couldn't get any data from the url");
}
return null;
}
@Override
protected void onPostExecute(Void args) {
adapter = new ChatMessageListAdapter(ChatScreenActivity.this, arraylist);
list.setAdapter(adapter);
mProgressDialog.dismiss();
}
}
}
这是我的适配器类
public class ChatMessageListAdapter extends BaseAdapter {
private Activity activity;
private static LayoutInflater inflater = null;
ArrayList<HashMap<String, String>> data;
HashMap<String, String> resultp = new HashMap<String, String>();
ChatMessageListAdapter adapter;
public ChatMessageListAdapter(Activity a, ArrayList<HashMap<String, String>> arraylist) {
activity = a;
data = arraylist;
inflater = (LayoutInflater) activity
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
public int getCount() {
return data.size();
}
public Object getItem(int position) {
return position;
}
public long getItemId(int position) {
return position;
}
public static class ViewHolder {
// items for main crowd list
public TextView txt_message;
public RelativeLayout layout_align;
}
public View getView(int position, View convertView, ViewGroup parent) {
View view = convertView;
final ViewHolder holder;
try {
if (convertView == null) {
holder = new ViewHolder();
view = inflater.inflate(R.layout.message_chat_row, null);
holder.txt_message = (TextView) view.findViewById(R.id.txt_message);
holder.layout_align = (RelativeLayout) view.findViewById(R.id.layout_align);
view.setTag(holder);
} else
holder = (ViewHolder) view.getTag();
resultp=data.get(position);
String type = resultp.get("Receiver_User_Id");
String message =resultp.get("Chat_Text");
String User_id=resultp.get("User_Id");// data.get(position).message;
if (!type.equalsIgnoreCase(User_id)) {
holder.layout_align.setGravity(Gravity.RIGHT);
holder.txt_message.setText(message);
holder.txt_message.setBackgroundResource(R.drawable.bubble_green);
}
else {
holder.layout_align.setGravity(Gravity.LEFT);
holder.txt_message.setText(message);
holder.txt_message.setBackgroundResource(R.drawable.bubble_yellow);
}
} catch (Exception e) {
// TODO: handle exception
}
return view;
}
}
【问题讨论】:
-
我的问题是在我的数组列表中添加“usertext”的位置。我已经尝试在messagesend按钮中添加点击,bt失败。
-
在 0 位置添加 HashMap,例如:arraylist.add(0,map);
-
你想说,先在hash中添加文本,然后再添加到arraylist中。
-
-
我正在尝试 arraylist.add(0,map) ,bt 在 add 中给出错误,尝试 addall ,bt 它也给出了错误。这是我的问题,我无法添加。跨度>
标签: android