亂碼2

package com.witknow.witwebview;

import java.lang.reflect.Method;

import org.json.JSONObject;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;
import android.view.View;
import android.webkit.JavascriptInterface;
import android.webkit.JsResult;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Button;
import android.widget.Toast;

import com.witknow.util.StringUtils;

public class witwebviewViewController extends Activity {
private Handler handler= new Handler();
public WebView myWebView = null;
private Button myButton = null;
private String callbackjsfunc;
@SuppressLint({ "SetJavaScriptEnabled", "JavascriptInterface" })
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.witwebview);
myWebView = (WebView) findViewById(R.id.myWebView);
WebSettings webSettings = myWebView.getSettings();
webSettings.setJavaScriptEnabled(true);
webSettings.setDefaultTextEncodingName("GBK");
myWebView.setWebViewClient(new WebViewClient());
myWebView.setWebChromeClient(new WebChromeClient()
{
@Override
public boolean onJsAlert(WebView view, String url, String message,
JsResult result)
{
return super.onJsAlert(view, url, message, result);
}

        });
        myWebView.addJavascriptInterface(new WebAppInterface(this),"witwebview");
        myWebView.loadUrl("file:///android_asset/index.html");
        
        // 這里用一個Android按鈕按下后調(diào)用JS中的代碼
        myButton = (Button) findViewById(R.id.button1);
        myButton.setOnClickListener(new View.OnClickListener()
        {
            @Override
            public void onClick(View v)
            {
                // 用Android代碼調(diào)用JavaScript函數(shù):
                //myWebView.loadUrl("javascript:result('asfas')");
            
            }
        }); 
    }
    public class WebAppInterface
    {
        Context mContext;
        WebAppInterface(Context c)
        {
            mContext = c;
        }
        // 如果target 大于等于API 17叭喜,則需要加上如下注解
         @JavascriptInterface
        public void postMessage(String json)
        {
             String num = null,classname="",functioname="",params="";
             Class<?> callclass=null;
             Object outputobj=null;
             try
             {
                JSONObject objjson=null;
                objjson = new JSONObject(json);
                classname=objjson.getString("classname");
                functioname=objjson.getString("functionname");
                params = objjson.getString("params");
                callbackjsfunc=objjson.getString("callback");
                JSONObject jsonparams=objjson.getJSONObject("params");//params 為json
             }
             catch(Exception e)
             {
                 Toast.makeText(mContext, "json解析失敗"+e.getMessage().toString(), Toast.LENGTH_SHORT).show();
                 return;
             }
             //分析 json  
                try 
                {
                    callclass  = Class.forName("com.witknow.witwebview."+classname);
                    outputobj=callclass.newInstance();//obj指向的A類的對象
                    //Toast.makeText(mContext, "類存在", Toast.LENGTH_SHORT).show();
                }
                catch(Exception e)
                {
                    Toast.makeText(mContext, "類不存在", Toast.LENGTH_SHORT).show();
                    return;
                }
                Class[] paramTypes = null;
                try
                {
                    Method[] fields = outputobj.getClass().getDeclaredMethods();//獲取對象屬性
                    for(int z=0;z<fields.length;z++)
                    {
                        Method field=fields[z];
                        if(field.getName().toString().equals("output"))
                          {
                            paramTypes = field.getParameterTypes();//獲得一個方法參數(shù)數(shù)組(getparameterTypes用于返回一個描述參數(shù)類型的Class對象數(shù)組)
                            break;
                            //for(int j = 0 ; j < paramTypes.length; j++)
                            //{
                                //Toast.makeText(getApplicationContext(), paramTypes[j].getName().toString(), Toast.LENGTH_SHORT).show();
                                //Toast.makeText(mContext,paramTypes[ j ].getName(), Toast.LENGTH_SHORT).show();
                            //}
                             //break;
                          }
                    }
                    Method method = callclass.getMethod("output",paramTypes);//初始化方法
                    final Object obj=method.invoke(outputobj,"dfgHJKL:FGHJKL:");
                    handler.post(new Runnable() { 
                        @Override 
                        public void run(){ 
                            returnjs(obj);
                        } 
                    });
                    
                }
                catch(Exception e)
                {
                    Toast.makeText(mContext, "方法不存在"+e.getMessage().toString(), Toast.LENGTH_SHORT).show();
                    return;
                }
        }
     
    }

public void returnjs(Object params)
{
myWebView.loadUrl("javascript:result('"+params.toString()+"')");
}
public String output(String str)
{
return str;
}
}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末财破,一起剝皮案震驚了整個濱河市川陆,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌猖腕,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,858評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件什湘,死亡現(xiàn)場離奇詭異耿导,居然都是意外死亡,警方通過查閱死者的電腦和手機回懦,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評論 3 395
  • 文/潘曉璐 我一進店門檬姥,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人粉怕,你說我怎么就攤上這事健民。” “怎么了贫贝?”我有些...
    開封第一講書人閱讀 165,282評論 0 356
  • 文/不壞的土叔 我叫張陵秉犹,是天一觀的道長。 經(jīng)常有香客問我稚晚,道長崇堵,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,842評論 1 295
  • 正文 為了忘掉前任客燕,我火速辦了婚禮鸳劳,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘也搓。我一直安慰自己赏廓,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,857評論 6 392
  • 文/花漫 我一把揭開白布傍妒。 她就那樣靜靜地躺著幔摸,像睡著了一般。 火紅的嫁衣襯著肌膚如雪颤练。 梳的紋絲不亂的頭發(fā)上既忆,一...
    開封第一講書人閱讀 51,679評論 1 305
  • 那天,我揣著相機與錄音,去河邊找鬼患雇。 笑死跃脊,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的苛吱。 我是一名探鬼主播匾乓,決...
    沈念sama閱讀 40,406評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼又谋!你這毒婦竟也來了拼缝?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,311評論 0 276
  • 序言:老撾萬榮一對情侶失蹤彰亥,失蹤者是張志新(化名)和其女友劉穎咧七,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體任斋,經(jīng)...
    沈念sama閱讀 45,767評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡继阻,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了废酷。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片瘟檩。...
    茶點故事閱讀 40,090評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖澈蟆,靈堂內(nèi)的尸體忽然破棺而出墨辛,到底是詐尸還是另有隱情,我是刑警寧澤趴俘,帶...
    沈念sama閱讀 35,785評論 5 346
  • 正文 年R本政府宣布睹簇,位于F島的核電站,受9級特大地震影響寥闪,放射性物質(zhì)發(fā)生泄漏太惠。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,420評論 3 331
  • 文/蒙蒙 一疲憋、第九天 我趴在偏房一處隱蔽的房頂上張望凿渊。 院中可真熱鬧,春花似錦缚柳、人聲如沸埃脏。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽剂癌。三九已至淤翔,卻和暖如春翰绊,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評論 1 271
  • 我被黑心中介騙來泰國打工监嗜, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留谐檀,地道東北人。 一個月前我還...
    沈念sama閱讀 48,298評論 3 372
  • 正文 我出身青樓裁奇,卻偏偏與公主長得像桐猬,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子刽肠,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,033評論 2 355

推薦閱讀更多精彩內(nèi)容