Android开发初体验

来源:互联网 发布:手机录像机软件 编辑:程序博客网 时间:2024/06/07 22:13

这几天由于项目的需要突击学习了一下安卓方面的东西,由于完全没接触过安卓,所以就在京东买了一本郭霖大神的《第一行代码》(第2版)参考学习,这本书很不错,对于Android零基础上手很快。

总结一下用到了哪些东西。

1.创建活动和布局

安卓开发以Activity为主体,就好像main方法一样,启动一个安卓app就是进入一个主Activity中去,’onCreate’方法来初始化一些组件,应用启动时需要的东西。

比如一些按钮,控件等等

protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        //按钮绑定事件        findViewById(R.id.testBtn).setOnClickListener(this);        findViewById(R.id.showBtn).setOnClickListener(this);        findViewById(R.id.loginBtn).setOnClickListener(this);        findViewById(R.id.sendBtn).setOnClickListener(this);        webView = (WebView) findViewById(R.id.web_view);        webView.setWebChromeClient(new WebChromeClient(){           @Override           public boolean onJsAlert(WebView view, String url, String message, JsResult result) {               Log.e("alert", message);               return super.onJsAlert(view, url, message, result);           }        });        webView.getSettings().setJavaScriptEnabled(true);  //允许运行js        webView.addJavascriptInterface(new JsInterface(),"androidMeth");        webView.loadUrl("file:///android_asset/index.html");      }

这里用到了WebView 控件,该控件是一个可以调用内置浏览器的东西,因为我这里需要在android里面调用JavaScript方法,所以用到了。

2.在Android中调用js中方法和在js中调用java方法

既然用到了,那就总结一下,在网上搜了好久。

这里是调用本地的js,html文件
1.首先在工程项目中新建一个 asserts文件夹(在main文件夹中),将html,js等放在这个文件夹中。
2.在项目下的 .iml文件中加入下面的代码(不是在最外面的.iml文件)

<option name="ASSETS_FOLDER_RELATIVE_PATH" value="/src/main/assets" />

3.由于我的js文件都引用在index.html文件中,所以就只加这一个文件,这是本地的

 webView.getSettings().setJavaScriptEnabled(true);  //允许运行js  webView.loadUrl("file:///android_asset/index.html");  

4.调用js方法的语法如下(show()方法为js中的方法)

 webView.loadUrl("javascript:show()");

5.如果还想获取js方法的返回值,有一个办法就是在js方法中再调用java的方法
1)首先声明一个普通的Java类

class JsInterface{             @JavascriptInterface       public void getUrl(String result){           Log.e("getUrl", result);           String url=result;       }    }

2)调用下面的方法,把刚才建的对象传进去,后面的字符串代表这个对象在js中的别名

webView.addJavascriptInterface(new JsInterface(),"androidMeth");

也就是说在js方法中,我们可以通过androidMeth来代表这个Java对象
3)在js代码中调用

        function show(){           var url="www.baidu.com";           window.androidMeth.getUrl(url);//调用Java代码将值传入        }

此时,在2)步的getUrl方法中,String url=result;url就可以获取到值了。

3.网络通信

类似于Java习惯,在安卓中需要注意的是,不要在主线程中做一些耗时的事,因为主线程主要是用来交互的,所以这里新建了一个线程来发送和接受http请求

//todo 发送http请求    private void sendRequestWithHttpURLConnection(final String url){        new Thread(new Runnable() {            @Override            public void run() {                HttpURLConnection connection=null;                BufferedReader reader=null;                try {                    URL u = new URL(url);                    connection = (HttpURLConnection) u.openConnection();                    connection.setRequestMethod("POST");                    connection.setConnectTimeout(8000);                    connection.setReadTimeout(8000);                    //todo 发送数据                    DataOutputStream out = new DataOutputStream(connection.getOutputStream());                    out.writeUTF("pathid=1&carid=2&longitude=39.12&latitude=116.21");                                        InputStream in=connection.getInputStream();                    reader = new BufferedReader(new InputStreamReader(in));                    StringBuilder sb=new StringBuilder();                    String line;                    while ((line = reader.readLine()) != null) {                        sb.append(line);                    }                    out.flush();                    out.close();                    showResult(sb.toString());                } catch (Exception e) {                    e.printStackTrace();                }finally {                    if (reader != null) {                        try {                            reader.close();                        } catch (IOException e) {                            e.printStackTrace();                        }                    }                    if (connection != null) {                        connection.disconnect();                    }                }            }        }).start();    }
原创粉丝点击