package cn.eoe.app.ui;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.codehaus.jackson.JsonParseException;
import org.codehaus.jackson.map.JsonMappingException;
import org.codehaus.jackson.map.ObjectMapper;
import org.codehaus.jackson.type.TypeReference;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.graphics.Bitmap;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.inputmethod.InputMethodManager;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.TextView;
import cn.eoe.app.R;
import cn.eoe.app.biz.DiscussDao;
import cn.eoe.app.entity.DetailsDiscussItem;
import cn.eoe.app.entity.DetailsDiscussJson;
import cn.eoe.app.entity.DetailsOwnDiscussJson;
import cn.eoe.app.https.HttpUtils;
import cn.eoe.app.ui.base.BaseActivity;
import cn.eoe.app.utils.ImageUtil;
import cn.eoe.app.utils.ImageUtil.ImageCallback;
import cn.eoe.app.utils.Utility;
public class DetailsDiscussActivity extends BaseActivity implements
OnClickListener {
private ListView mListview;
private Button mEnter;
private ImageView mGoBack;
private EditText mEditDiscuss;
private SimpleAdapter mAdapter;
private List<Map<String, Object>> mlist;
private TextView title;
private String mDiscussList = "";
private String mDiscuss = "";
ObjectMapper mObjectMapper = new ObjectMapper();
SharedPreferences share;
private String mKey = "";
private DiscussDao mDao;
private String mTitle;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.details_discuss_activity);
share = getSharedPreferences(UserLoginUidActivity.SharedName,
Context.MODE_PRIVATE);
mDao = new DiscussDao(this);
mKey = share.getString(UserLoginUidActivity.KEY, "");
getIntentEntra();
initControl();
initList();
new DataAsyncTask().execute(mDiscussList);
}
private void getIntentEntra() {
Intent intent = getIntent();
mDiscussList = intent.getStringExtra("discuss_list");
mDiscuss = intent.getStringExtra("discuss");
mTitle = intent.getStringExtra("title");
}
private void initControl() {
mListview = (ListView) findViewById(R.id.details_listview_show);
mEnter = (Button) findViewById(R.id.details_button_enter);
mGoBack = (ImageView) findViewById(R.id.details_imageview_gohome);
mEditDiscuss = (EditText) findViewById(R.id.details_edittext_discuss);
mEnter.setOnClickListener(this);
mGoBack.setOnClickListener(this);
title = (TextView) findViewById(R.id.details_textview_title);
title.setText(mTitle);
}
private void initList() {
mlist = new ArrayList<Map<String, Object>>();
mAdapter = new SimpleAdapter(this, mlist,
R.layout.details_discuss_item, new String[] { "image", "name",
"content", "time" }, new int[] {
R.id.details_imageview_head,
R.id.details_textview_name,
R.id.details_textview_content,
R.id.details_textview_time }) {
@Override
public void setViewImage(ImageView v, String value) {
// TODO Auto-generated method stub
super.setViewImage(v, value);
ImageUtil.setThumbnailView(value, v,
DetailsDiscussActivity.this, callback, false);
}
ImageCallback callback = new ImageCallback() {
@Override
public void loadImage(Bitmap bitmap, String imagePath) {
// TODO Auto-generated method stub
try {
ImageView img = (ImageView) mListview
.findViewWithTag(imagePath);
img.setImageBitmap(bitmap);
} catch (Exception e) {
e.printStackTrace();
}
}
};
};
mListview.setAdapter(mAdapter);
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
switch (v.getId()) {
case R.id.details_button_enter:
//
new PublishAsyncTask().execute();
((InputMethodManager) getSystemService(INPUT_METHOD_SERVICE))
.hideSoftInputFromWindow(DetailsDiscussActivity.this
.getCurrentFocus().getWindowToken(),
InputMethodManager.HIDE_NOT_ALWAYS);
break;
case R.id.details_imageview_gohome:
finish();
break;
}
}
class DataAsyncTask extends
AsyncTask<String, Void, List<Map<String, Object>>> {
@Override
protected List<Map<String, Object>> doInBackground(String... params) {
// TODO Auto-generated method stub
String result;
try {
result = HttpUtils.getByHttpClient(
DetailsDiscussActivity.this, params[0]);
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
return null;
}
DetailsDiscussJson DiscussJson = null;
try {
DiscussJson = mObjectMapper.readValue(result,
new TypeReference<DetailsDiscussJson>() {
});
} catch (JsonParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (JsonMappingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if (DiscussJson != null) {
List<DetailsDiscussItem> items = DiscussJson.getResponse()
.getItems();
List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
Map<String, Object> map;
for (int i = 0; i < items.size(); i++) {
map = new HashMap<String, Object>();
map.put("image", items.get(i).getHead_image_url());
map.put("name", items.get(i).getUname());
map.put("content", items.get(i).getBody());
map.put("time", Date(items.get(i).getTime()));
list.add(map);
}
return list;
}
return null;
}
@Override
protected void onPostExecute(List<Map<String, Object>> result) {
// TODO Auto-generated method stub
super.onPostExecute(result);
if (result == null)
return;
mlist.addAll(result);
mAdapter.notifyDataSetChanged();
}
}
class PublishAsyncTask extends AsyncTask<Void, Void, Map<String, Object>> {
private String getUrl(String url) {
return String.format(url + "&body=%s", mEditDiscuss.getText()
.toString())
+ Utility.getParams(mKey);
}
@Override
protected Map<String, Object> doInBackground(Void... params) {
// TODO Auto-generated method stub
if (mKey.equals(""))
return null;
DetailsOwnDiscussJson json = mDao
.mapperJson(getUrl(mDiscuss), true);
if (json != null && json.getResponse().getIsErr() == 0) {
DetailsDiscussItem item = json.getResponse().getItem();
Map<String, Object> map = new HashMap<String, Object>();
map.put("image", item.getHead_image_url());
map.put("name", item.getUname());
map.put("content", item.getBody());
map.put("time", Date(item.getTime()));
return map;
}
return null;
}
@Override
protected void onPostExecute(Map<String, Object> result) {
// TODO Auto-generated method stub
super.onPostExecute(result);
if (result == null) {
showLongToast(getResources().getString(R.string.discuss_fail));
return;
}
mlist.add(result);
showLongToast(getResources().getString(R.string.discuss_succeed));
mAdapter.notifyDataSetChanged();
}
}
private String Date(String longtime) {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Long time = new Long(longtime + "000");
String result = format.format(time);
return result;
}
}