package com.todayinfo.ui.activity; import java.util.ArrayList; import java.util.List; import org.apache.http.Header; import org.json.JSONObject; import android.annotation.SuppressLint; import android.content.Intent; import android.os.Bundle; import android.text.TextUtils; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.webkit.WebChromeClient; import android.webkit.WebView; import android.webkit.WebViewClient; import android.widget.LinearLayout; import android.widget.RelativeLayout; import android.widget.ScrollView; import android.widget.TextView; import com.jinghua.todayinformation.R; import com.loopj.android.http.AsyncHttpResponseHandler; import com.loopj.android.http.RequestParams; import com.todayinfo.model.ArticleItem; import com.todayinfo.model.TextArticleItem; import com.todayinfo.ui.component.ErrorHintView; import com.todayinfo.ui.component.ErrorHintView.OperateListener; import com.todayinfo.ui.component.SuperUI; import com.todayinfo.utils.AsyncHttpUtil; import com.todayinfo.utils.Contacts; import com.todayinfo.utils.JsonUtils; import com.todayinfo.utils.MD5Utils; /** * 科技详情 * * @author zhou.ni 2015年5月18日 */ public class PhoneTechDetailActivity extends SuperActivity implements OnClickListener{ private TextView mTitle; private TextView mDate; private WebView mWeb; private ErrorHintView mErrorHintView; private ScrollView mScrollView; public static int VIEW_CONTENT = 1; /**显示断网**/ public static int VIEW_WIFIFAILUER = 2; /** 显示加载数据失败 **/ public static int VIEW_LOADFAILURE = 3; public static int VIEW_LOADING = 4; private TextArticleItem item; private ArticleItem articleItem = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_text_tech_detail); getWindow().setBackgroundDrawable(null); initView(); } /** * 初始化控件 */ private void initView() { RelativeLayout headView = (RelativeLayout) this.findViewById(R.id.head); RelativeLayout leftBack = (RelativeLayout) headView.findViewById(R.id.back_left); TextView title = (TextView) headView.findViewById(R.id.head_title); title.setText("文章详情"); LinearLayout top = (LinearLayout) this.findViewById(R.id.toolbar_top); LinearLayout comment = (LinearLayout) this.findViewById(R.id.toolbar_comment); LinearLayout save = (LinearLayout) this.findViewById(R.id.toolbar_save); leftBack.setOnClickListener(this); top.setOnClickListener(this); comment.setOnClickListener(this); save.setOnClickListener(this); mTitle = (TextView) this.findViewById(R.id.title); mDate = (TextView) this.findViewById(R.id.date); mWeb = (WebView) this.findViewById(R.id.content); mErrorHintView = (ErrorHintView) this.findViewById(R.id.hintView); mScrollView = (ScrollView) this.findViewById(R.id.scroll); showLoading(VIEW_LOADING); loadtechDetail(); } /** * 加载文章内容 */ private void loadtechDetail(){ Intent intent = getIntent(); articleItem = (ArticleItem) intent.getSerializableExtra("ArticleItem"); String id = articleItem.getId(); RequestParams params = new RequestParams(); String t = String.valueOf(System.currentTimeMillis() / 1000); //获取当前时间 params.put("timestamp", t); //当前时间戳 String token1 = MD5Utils.md5("d19cf361181f5a169c107872e1f5b722" + t); params.put("token1", token1); //token1算法 params.put("apiid", 3); params.put("module", "api_libraries_sjdbg_detail"); params.put("returnformat", "json"); params.put("encoding", "utf8"); params.put("docid", id); //文章id // params.put("uid", uid ); //用户id ,登陆的时候传,不登陆不传 params.put("size", 500); //文章内图片的尺寸可以传500 800默认为500 AsyncHttpUtil.get(Contacts.PHONE_URL, params, new AsyncHttpResponseHandler() { @Override public void onSuccess(int arg0, Header[] arg1, byte[] arg2) { if ( arg2!=null && arg2.length>0 ) { try { JSONObject obj = new JSONObject(new String(arg2)); String status = obj.getString("status"); if ( TextUtils.equals("1", status) ) { showLoading(VIEW_CONTENT); JSONObject data = obj.getJSONObject("data"); JSONObject info = data.getJSONObject("info"); item = JsonUtils.getInstance(TextArticleItem.class, info); if ( item!=null ) { mTitle.setText(item.getTitle()); mDate.setText(item.getDate()); initWebView(item.getContent()); } } else { showLoading(VIEW_LOADFAILURE); } } catch (Exception e) { showLoading(VIEW_LOADFAILURE); } } else { showLoading(VIEW_LOADFAILURE); } } @Override public void onFailure(int arg0, Header[] arg1, byte[] arg2, Throwable arg3) { showLoading(VIEW_WIFIFAILUER); } }); } /** * 初始化WebView * @param data */ @SuppressLint("SetJavaScriptEnabled") private void initWebView(String data) { // 如果访问的页面中有Javascript,则webview必须设置支持Javascript mWeb.getSettings().setJavaScriptEnabled(true); mWeb.getSettings().setJavaScriptCanOpenWindowsAutomatically(true); // mWeb.getSettings().setLayoutAlgorithm(LayoutAlgorithm.SINGLE_COLUMN); // 触摸焦点起作用 mWeb.requestFocus(); // 取消滚动条 mWeb.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY); mWeb.setHorizontalScrollBarEnabled(false);//水平不显示 mWeb.setVerticalScrollBarEnabled(false); //垂直不显示 // 设置WevView要显示的网页: // mWeb.loadUrl(url); mWeb.loadDataWithBaseURL(null, data,"text/html", "UTF-8", null); // 设置不可缩放 mWeb.getSettings().setSupportZoom(false); mWeb.getSettings().setBuiltInZoomControls(false); mWeb.setWebViewClient(new MyWebViewClient()); mWeb.setWebChromeClient(new WebChromeClient()); // mWeb.addJavascriptInterface(this, "todayinfo"); } class MyWebViewClient extends WebViewClient { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { if (!TextUtils.isEmpty(url)) { Log.d("shouldOverrideUrlLoading", "onPageFinished"); mWeb.loadUrl(url); } return true; } @Override public void onPageFinished(WebView view, String url) { String title = view.getTitle(); if( TextUtils.isEmpty(title) ){ return; } } @Override public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { Log.d("onReceivedError", "onReceivedError"); } } /** * 显示正在加载界面 * * @param i */ private void showLoading(int i){ mErrorHintView.setVisibility(View.GONE); mScrollView.setVisibility(View.GONE); switch(i){ case 1: mErrorHintView.hideLoading(); mScrollView.setVisibility(View.VISIBLE); break; case 2: mErrorHintView.hideLoading(); mErrorHintView.netError(new OperateListener() { @Override public void operate() { showLoading(VIEW_LOADING); loadtechDetail(); } }); break; case 3: mErrorHintView.hideLoading(); mErrorHintView.loadFailure(new OperateListener() { @Override public void operate() { showLoading(VIEW_LOADING); loadtechDetail(); } }); break; case 4: mErrorHintView.loadingData(); break; } } @Override public void retry() { } @Override public void netError() { } @Override protected void obtainInfo() { } @Override public void onClick(View v) { switch (v.getId()) { case R.id.back_left: finish(); break; case R.id.toolbar_top: mScrollView.scrollTo(0, 0); break; case R.id.toolbar_comment: Intent intent = new Intent(this, PhoneTechCommentActivity.class); intent.putExtra("docid", item.getDocid()); startActivity(intent); break; case R.id.toolbar_save: List<Object> list = mUserController.getCollectionInfo(); if ( list==null ) { list = new ArrayList<Object>(); list.add(articleItem); mUserController.saveCollectionInfo(list); SuperUI.showCollectionUI(mContext); } else { if ( list.contains(articleItem) ) { list.remove(articleItem); mUserController.saveCollectionInfo(list); SuperUI.showUncollectionUI(mContext); } else { list.add(articleItem); mUserController.saveCollectionInfo(list); SuperUI.showCollectionUI(mContext); } } break; default: break; } } }