今天跟大家分享的是我學android時的筆記。以前搞net很多年了,現在還在搞這。本著活到老學到老抽了點時間學習了下android。android網上有很多的視頻教程,當時對於我這樣以前不了解java和eclipse的人來說還是遇到了一些很讓人頭疼的各種問題,分享這些問題我想對於跟我一樣基礎的人學習android肯定很有價值,有不周到的地方大家多指正。android挺好的,值得我花的時間,推薦大家有空也看看。
一、eclipse我常用的快捷鍵
1.、ctrl+shift+r:打開資源
2、ctrl_shift+/ 注釋
3. ctrl+o:快速outline,神器啊
4. ctrl+e:快速轉換編輯器,神器啊
5. alt+shift+r:重命名
7. shift+enter及ctrl+shift+enter
8. Alt+方向鍵
9. ctrl+m 最大\小化編輯器
10. ctrl+.:下一個錯誤及快速修改
Ctrl+Shift+X 把當前選中的文本全部變味小寫
Ctrl+Shift+Y 把當前選中的文本全部變為小寫
Ctrl+Shift+F 格式化當前代碼
eclipse 斷點調試快捷鍵
F3 --跳到聲明或定義的地方。
F5 --單步調試進入函數內部。
F6 --單步調試不進入函數內部,如果裝了金山詞霸2006則要把“取詞開關”的快捷鍵改成其他的。
F7 --由函數內部返回到調用處。
F8 --一直執行到下一個斷點。
二、安裝sdk錯誤
SDK Manager:failed to install Warning! A folder failed to be renamed or moved.On Windows this typically means that a propram is using that folder>>>D:\android\android-sdk-windows\tools.When ready,press YES to try again.
解決辦法:
1.進入sdk的temp文件夾,下載好後會有一個tools_r06-windows.zip(版本號可能會不一樣)
2.解壓此文件,如解壓成tools_r06-windows
3.進入tools_r06-windows文件夾,將tools_r06-windows裡的文件復制
4.覆蓋sdk根目錄的tools文件夾中的文件
三、sqllite操作
運行起模擬器
adb shell 進入linux命令行
ls -l查看目錄
cd進入目錄
sqlite3 test.db操作test.db
插入數據:
SQLiteDatabase db = openOrCreateDatabase("test",
Context.MODE_PRIVATE, null);
String sql = "insert into role(id,name) values(?,?)";
String[] values=new String[]{"11","系統管理員"};
db.execSQL(sql, values);
四、DDMS介紹
DDMS 的全稱是Dalvik Debug Monitor Service,為測試設備截屏,針對特定的進程查看正在運行的線程以及堆信息、Logcat、廣播狀態信息、模擬電話呼叫、接收SMS、虛擬地理坐標等等
FileExolorer文件浏覽
EmulatorControl模擬向模擬器發送短信,聲音。等
五、android.os.NetworkOnMainThreadException
android4.0後不能再主線程上執行下載需要使用異步
需要新建一個線程執行Runnable中的操作,然後把結果發送給Handler
復制代碼
1、新線程
new Thread(runnable).start();
2、執行下載操作
Runnable runnable = new Runnable() {
@Override
public void run() {
//執行下載操作
Message msg = new Message();
//發送結果
handler.sendMessage(msg);
}
};
private Handler handler = new Handler() {
@Override
// 當有消息發送出來的時候就執行Handler的這個方法
public void handleMessage(Message msg) {
try {
//處理結果
} catch (Exception e) {
Log.e(e.getMessage(), e.toString());
}
}
};
復制代碼
2、當然要是真不想使用異步也可以直接下載的,需要設置下,怎麼設置大家找下度娘。
六、 java.net.SocketException: Permission denied (maybe missing INTERNET permission)
在android中想操作文件,上個網,查看通訊錄。啥的都需要開通相應的權限
需要把對應授權加到AndroidManifest.xml中
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
列幾個,這塊可以在android開發文檔中查找其他的
android.permission.ACCESS_CHECKIN_PROPERTIES 允許讀寫訪問”properties”表在checkin數據庫中,改值可以修改上傳( Allows read/write access to the “properties” table in the checkin database, to change values that get uploaded)
android.permission.ACCESS_COARSE_LOCATION 允許一個程序訪問CellID或WiFi熱點來獲取粗略的位置(Allows an application to access coarse (e.g., Cell-ID, WiFi) location)
android.permission.ACCESS_FINE_LOCATION 允許一個程序訪問精良位置(如GPS) (Allows an application to access fine (e.g., GPS) location)
android.permission.ACCESS_LOCATION_EXTRA_COMMANDS 允許應用程序訪問額外的位置提供命令(Allows an application to access extra location provider commands)
android.permission.ACCESS_MOCK_LOCATION 允許程序創建模擬位置提供用於測試(Allows an application to create mock location providers for testing)
android.permission.ACCESS_NETWORK_STATE 允許程序訪問有關GSM網絡信息(Allows applications to access information about networks)
android.permission.ACCESS_SURFACE_FLINGER 允許程序使用SurfaceFlinger底層特性(Allows an application to use SurfaceFlinger’s low level features)
android.permission.ACCESS_WIFI_STATE 允許程序訪問Wi-Fi網絡狀態信息(Allows applications to access information about Wi-Fi networks)
android.permission.ADD_SYSTEM_SERVICE 允許程序發布系統級服務(Allows an application to publish system-level services).
七、模擬器10.0.2.2 代表127.0.0.1
經常在模擬器中測試下載文件啥的,用127.0.0.1不行啦
八、http操作
沒有使用過java的人可以看下,我也是在網上找來的
復制代碼
package com.example.tools;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
public class HttpDownLoad {
public String Download(String url) {
StringBuilder sb = new StringBuilder();
BufferedReader br = null;
String s;
try {
URL r = new URL(url);
HttpURLConnection con = (HttpURLConnection) r.openConnection();
br = new BufferedReader(new InputStreamReader(con.getInputStream()));
while ((s = br.readLine()) != null) {
sb.append(s);
}
} catch (Exception ex) {
ex.printStackTrace();
} finally {
try {
br.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return sb.toString();
}
public InputStream GetInputStream(String url) {
try {
URL r = new URL(url);
HttpURLConnection con = (HttpURLConnection) r.openConnection();
InputStream input = con.getInputStream();
return input;
} catch (Exception ex) {
ex.printStackTrace();
return null;
}
}
}
復制代碼
九、操作XML之SAX
今天只跟大家分享下SAX這個輕量級的操作XML方法,他不像DOM那種把文件都加載到內存後再操作XML,我比較喜歡的
復制代碼
package cn.itcast.service;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
import cn.itcast.model.Person;
public class SAXPersonService {
public List<Person> getPersons(InputStream inStream) throws Throwable
{
SAXParserFactory factory = SAXParserFactory.newInstance();//工廠模式還是單例模式?
SAXParser parser =factory.newSAXParser();
PersonParse personParser =new PersonParse();
parser.parse(inStream, personParser);
inStream.close();
return personParser.getPerson();
}
private final class PersonParse extends DefaultHandler
{
private List<Person> list = null;
Person person =null;
private String tag=null;
public List<Person> getPerson() {
return list;
}
@Override
public void startDocument() throws SAXException {
list =new ArrayList<Person>();
}
@Override
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
if("person".equals(localName))
{
//xml元素節點開始時觸發,是“person”
person = new Person();
person.setId(new Integer(attributes.getValue(0)));
}
tag =localName;//保存元素節點名稱
}
@Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
//元素節點結束時觸發,是“person”
if("person".equals(localName))
{
list.add(person);
person=null;
}
tag =null;//結束時,需要清空tag
}
@Override
public void characters(char[] ch, int start, int length)
throws SAXException {
if(tag!=null)
{
String data = new String(ch,start,length);
if("name".equals(tag))
{
person.setName(data);
}else if("age".equals(tag))
{
person.setAge(new Integer(data));
}
}
}
}