package cn.fanfan.detail.question; import java.util.ArrayList; import java.util.regex.Matcher; import java.util.regex.Pattern; import org.apache.http.Header; import org.apache.http.client.CookieStore; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import com.loopj.android.http.AsyncHttpClient; import com.loopj.android.http.AsyncHttpResponseHandler; import cn.fanfan.common.Config; import cn.fanfan.common.TextShow; import cn.fanfan.main.R; import cn.fanfan.topic.imageload.ImageDownLoader; import cn.sharesdk.framework.ShareSDK; import cn.sharesdk.onekeyshare.OnekeyShare; import com.loopj.android.http.PersistentCookieStore; import android.app.ActionBar; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.util.DisplayMetrics; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.LinearLayout; import android.widget.ListView; import android.widget.ProgressBar; import android.widget.TextView; import android.widget.Toast; public class QuestionDetailActivity extends Activity { private CookieStore myCookieStore; private static ArrayList<AnswerItem> comlists;; private TextView questiontitle, focus, answercount; private TextView questiondetil; private LinearLayout addanswer,answerlist; private AsyncHttpClient client; private TextShow textShow; private String question_content;// ���� private String question_id;// ����id private Button focusques; private int focustag = 1; private LinearLayout layout; private ProgressBar progressBar; private ImageDownLoader downLoader; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.question_detail); ActionBar actionBar = getActionBar(); actionBar.setIcon(null); actionBar.setTitle("������ϸ"); actionBar.setDisplayUseLogoEnabled(false); actionBar.setDisplayHomeAsUpEnabled(true); actionBar.show(); client = new AsyncHttpClient(); myCookieStore = new PersistentCookieStore(this); client.setCookieStore(myCookieStore); layout = (LinearLayout)findViewById(R.id.linear); focusques = (Button)findViewById(R.id.focusques); progressBar = (ProgressBar)findViewById(R.id.progressBar); addanswer = (LinearLayout) findViewById(R.id.addanswer); questiontitle = (TextView) findViewById(R.id.question_contents); questiondetil = (TextView) findViewById(R.id.question_detail); focus = (TextView) findViewById(R.id.focus_count); answercount = (TextView) findViewById(R.id.answer_count); answerlist = (LinearLayout)findViewById(R.id.answerlist); answerlist.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { // TODO Auto-generated method stub Intent intent = new Intent(); intent.setClass(QuestionDetailActivity.this, AnswerList.class); startActivity(intent); } }); downLoader = new ImageDownLoader(this); focusques.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { // TODO Auto-generated method stub focusques.setText(""); progressBar.setVisibility(View.VISIBLE); Focusorno(); } }); comlists = new ArrayList<AnswerItem>(); Intent intent = getIntent(); question_id = intent.getStringExtra("questionid"); addanswer.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { // TODO Auto-generated method stub Intent intent =new Intent(); intent.putExtra("questionid", question_id); intent.setClass(QuestionDetailActivity.this, WriteAnswerActivity.class); startActivityForResult(intent, 1); } }); GetQuestion(question_id); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { // TODO Auto-generated method stub super.onActivityResult(requestCode, resultCode, data); if (resultCode == RESULT_OK) { flash(); } } private void GetQuestion(String questionId) { String url = Config.getValue("QuestionDetail") + questionId; client.get(url, new AsyncHttpResponseHandler() { @Override public void onFailure(int arg0, Header[] arg1, byte[] arg2, Throwable arg3) { // TODO Auto-generated method stub Toast.makeText(QuestionDetailActivity.this, "��������ʧ�ܣ�", Toast.LENGTH_LONG).show(); } @Override public void onSuccess(int arg0, Header[] arg1, byte[] arg2) { // TODO Auto-generated method stub String information = new String(arg2); JSONObject rsm = null; String answer_count = null; int errno = 0; JSONObject jsonObject = null; try { jsonObject = new JSONObject(information); errno = jsonObject.getInt("errno"); } catch (JSONException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } if (errno == 1) { try { rsm = jsonObject.getJSONObject("rsm"); JSONObject question_info = rsm .getJSONObject("question_info"); answer_count = rsm.getString("answer_count"); answercount.setText(answer_count); final String question_topics = rsm .getString("question_topics"); question_content = question_info .getString("question_content"); focustag = question_info.getInt("has_focus"); setFollow(); layout.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { // TODO Auto-generated method stub Intent intent = new Intent(); intent.putExtra("topic", question_topics); intent.setClass(QuestionDetailActivity.this, TopicAboutActivity.class); startActivity(intent); } }); String question_detail = question_info .getString("question_detail"); String focus_count = question_info.getString("focus_count"); questiontitle.setText(question_content); DisplayMetrics dm = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(dm); float screenW = dm.widthPixels; textShow = new TextShow(JSONTokener(question_detail), questiondetil,QuestionDetailActivity.this,screenW); focus.setText(focus_count); if (!answer_count.equals("0")) { JSONArray answers = rsm.getJSONArray("answers"); for (int i = 0; i < answers.length(); i++) { ArrayList<String> urls = new ArrayList<String>(); JSONObject answer = answers.getJSONObject(i); AnswerItem answerItem = new AnswerItem(); answerItem.setAnswer_id(answer.getString("answer_id")); String content = answer .getString("answer_content"); Pattern p=Pattern.compile("<img[^>]+src\\s*=\\s*['\"]([^'\"]+)['\"][^>]*>"); //System.out.println(content); Matcher m=p.matcher(content); while (m.find()) { Pattern pp = Pattern.compile("http://[([a-z0-9]|.|/|\\-)]+.[(jpg)|(bmp)|(gif)|(png)]"); Matcher mm = pp.matcher(m.group()); while (mm.find()) { urls.add(mm.group()); } } content = m.replaceAll(""); answerItem.setAnswer_content(content); answerItem.setUrls(urls); answerItem.setAgree_count(answer .getString("agree_count")); answerItem.setUid(answer.getString("uid")); answerItem.setName(answer.getString("user_name")); comlists.add(answerItem); if (i==2) { }else if ((i+1)%3== 0) { //adapter.notifyDataSetChanged(); } } } } catch (JSONException e) { // TODO Auto-generated catch block //e.printStackTrace(); try { JSONObject answers = rsm.getJSONObject("answers"); for (int i = 0; i < Integer.valueOf(answer_count); i++) { ArrayList<String> urls = new ArrayList<String>(); JSONObject answer = answers.getJSONObject(String.valueOf(i+1)); AnswerItem answerItem = new AnswerItem(); answerItem.setAnswer_id(answer.getString("answer_id")); String content = answer .getString("answer_content"); Pattern p=Pattern.compile("<img[^>]+src\\s*=\\s*['\"]([^'\"]+)['\"][^>]*>"); Matcher m=p.matcher(content); while (m.find()) { String url = m.group(); Pattern pp = Pattern.compile("http://[([a-z0-9]|.|/|\\-)]+.[(jpg)|(bmp)|(gif)|(png)]"); Matcher mm = pp.matcher(url); while (mm.find()) { urls.add(mm.group()); } } content = m.replaceAll(""); answerItem.setAnswer_content(content); answerItem.setUrls(urls); answerItem.setAgree_count(answer .getString("agree_count")); answerItem.setUid(answer.getString("uid")); answerItem.setName(answer.getString("user_name")); answerItem.setAvatar_file(answer.getString("avatar_file")); comlists.add(answerItem); if (i==2) { System.out.println(comlists.size()); }else if ((i+1)%3 == 0) { //adapter.notifyDataSetChanged(); } } } catch (Exception e2) { // TODO: handle exception e2.printStackTrace(); } } } else { try { String err = jsonObject.getString("err"); Toast.makeText(QuestionDetailActivity.this, err, Toast.LENGTH_LONG).show(); } catch (JSONException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }); } private void Focusorno(){ String url = Config.getValue("QuestionFocus")+question_id; client.get(url, new AsyncHttpResponseHandler(){ @Override public void onFailure(int arg0, Header[] arg1, byte[] arg2, Throwable arg3) { // TODO Auto-generated method stub Toast.makeText(QuestionDetailActivity.this, "��������ʧ�ܣ�", Toast.LENGTH_LONG).show(); } @Override public void onSuccess(int arg0, Header[] arg1, byte[] arg2) { // TODO Auto-generated method stub String info = new String(arg2); try { JSONObject jsonObject = new JSONObject(info); int errno = jsonObject.getInt("errno"); if (errno == 1) { JSONObject rsm = jsonObject.getJSONObject("rsm"); String type = rsm.getString("type"); progressBar.setVisibility(View.GONE); if (type.equals("add")) { focustag = 1; } else { focustag = 0; } setFollow(); } else { String err = jsonObject.getString("err"); Toast.makeText(QuestionDetailActivity.this, err, Toast.LENGTH_LONG).show(); } } catch (JSONException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }); } public static String JSONTokener(String in){ // consume an optional byte order mark (BOM) if it exists if (in != null && in.startsWith("\ufeff")) { in = in.substring(1); } return in; } private void setFollow(){ if (focustag == 1) { focusques.setBackgroundResource(R.drawable.btn_silver_normal); focusques.setText("ȡ����ע"); focusques.setTextColor(QuestionDetailActivity.this.getResources().getColor(R.color.text_color_gray)); }else { focusques.setBackgroundResource(R.drawable.btn_green_normal); focusques.setText("��ע"); focusques.setTextColor(QuestionDetailActivity.this.getResources().getColor(R.color.text_color_white)); } } public void cancleTask(){ downLoader.cacelTask(); } public static ArrayList<AnswerItem> getlist(){ return comlists; } public boolean onOptionsItemSelected(MenuItem item) { // TODO Auto-generated method stub switch (item.getItemId()) { case android.R.id.home: finish(); break; case R.id.share: showShare(); break; default: break; } return super.onOptionsItemSelected(item); } private void flash(){ comlists.clear(); questiondetil.setText(""); GetQuestion(question_id); } public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.share, menu); return super.onCreateOptionsMenu(menu); } // ���� private void showShare() { ShareSDK.initSDK(this); OnekeyShare oks = new OnekeyShare(); // �ر�sso��Ȩ oks.disableSSOWhenAuthorize(); // ����ʱNotification��ͼ������� oks.setNotification(R.drawable.ic_launcher, getString(R.string.app_name)); oks.setDialogMode();// ���óɴ���ģʽ oks.setImageUrl(Config.getValue("IconUrl")); // title���⣬ӡ��ʼǡ����䡢��Ϣ��΢�š���������QQ�ռ�ʹ�� oks.setTitle(question_content); // titleUrl�DZ�����������ӣ�������������QQ�ռ�ʹ�� oks.setTitleUrl(Config.getValue("ShareQuestionUrl") + question_id); /** url��΢�ţ��������ѡ�����Ȧ�ղأ������ţ��������Ѻ�����Ȧ����ʹ�ã�������Բ��ṩ */ oks.setUrl(Config.getValue("ShareQuestionUrl") + question_id); // text�Ƿ����ı�������ƽ̨����Ҫ����ֶ� oks.setText(question_content + Config.getValue("ShareQuestionUrl") + question_id + "�������Է�����׿�ˣ�"); // imagePath��ͼƬ�ı���·����Linked-In�����ƽ̨��֧�ִ˲��� // oks.setImagePath("/sdcard/test.jpg");// ����ͼƬ��ʱ����� // url����΢�ţ��������Ѻ�����Ȧ����ʹ�� oks.setUrl(Config.getValue("ShareQuestionUrl") + question_id); // comment���Ҷ�������������ۣ�������������QQ�ռ�ʹ�� oks.setComment(" "); // site�Ƿ�������ݵ���վ���ƣ�����QQ�ռ�ʹ�� oks.setSite(getString(R.string.app_name)); // siteUrl�Ƿ�������ݵ���վ��ַ������QQ�ռ�ʹ�� oks.setSiteUrl(Config.getValue("ShareQuestionUrl") + question_id); // ��������GUI oks.show(this); } }