您的位置:首页 > 移动开发 > Android开发

Android开发初体验

2017-11-06 19:36 375 查看
这几天由于项目的需要突击学习了一下安卓方面的东西,由于完全没接触过安卓,所以就在京东买了一本郭霖大神的《第一行代码》(第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();
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: