① android網路操作的幾種方法
第一種方式:使用HttpURLConnection進行聯網操作
這個方法需要我們手動構建一個http請求包,發送到指定的伺服器
get方式
設置URL
打開連接
設置請求方法為get
設置連接超時時間
設置讀取超時時間
把當前的request發送到伺服器端
等待伺服器的響應(此處會阻塞)
獲得響應碼(並在響應碼中做相應的操作),因為安卓子線程內不允許做UI更新的操作,所以需要轉到主線程來做(通過安卓中的handler來將信息傳遞到主線程)
java">publicvoidgetPic(Viewv){
newThread(newRunnable(){
@Override
publicvoidrun(){
try{
//首先要支出伺服器的地址
URLurl=newURL("http://192.168.2.1/day10_NetworkServer/brushli.jpg");
//通過http連接
=(HttpURLConnection)url.openConnection();
//設置請求方式,並設置等待響應時間
httpurlConnection.setRequestMethod("GET");
httpurlConnection.setConnectTimeout(5000);
//把當前的request發送到伺服器(安卓不允許在主線程內做耗時操作,如連接伺服器)
httpurlConnection.connect();
//發送完連接後等待操作,這個是阻塞式方法,
intresponseCode=httpurlConnection.getResponseCode();
//根據得到的響應代碼和response的信息作出相應的操作
if(responseCode==200){
//從伺服器讀取正確與否的信息
InputStreamis=httpurlConnection.getInputStream();
Filefile=newFile("/data/data/com.rgd.day10_network_3/files");
file.mkdir();
FileOutputStreamfos=newFileOutputStream(newFile("/data/data/com.rgd.day10_network_3/files/brushli.jpg"));
byte[]buffer=newbyte[1024];
intread;
while((read=is.read(buffer))!=-1){
fos.write(buffer,0,read);
}
//由於子線程不允許做UI更新操作,與要通過Handler進行和主線程的通信操作
Messagemsg=newMessage();
msg.what=1;
handler.sendMessage(msg);
fos.close();
is.close();
}
}catch(MalformedURLExceptione){
e.printStackTrace();
}catch(IOExceptione){
e.printStackTrace();
}
}
}).start();
}
Handlerhandler=newHandler(){
@Override
publicvoidhandleMessage(Messagemsg){
super.handleMessage(msg);
switch(msg.what){
case1:
Toast.makeText(MainActivity.this,"保存圖片成功",Toast.LENGTH_LONG).show();
break;
case2:
Toast.makeText(MainActivity.this,"保存MP3成功",Toast.LENGTH_LONG).show();
break;
case3:
Toast.makeText(MainActivity.this,"保存視頻成功",Toast.LENGTH_SHORT).show();
default:
break;
}
}
};
2.post方式
操作跟get差不多,除了post傳遞信息是通過正文傳遞的,而get是放在連接中的
newThread(newRunnable(){
@Override
publicvoidrun(){
try{
//首先要支出伺服器的地址
URLurl=newURL("http://192.168.106.1/day10_NetworkServer/servlet/loginInfo");
//通過http連接
=(HttpURLConnection)url.openConnection();
//設置請求方式,並設置等待響應時間
httpurlConnection.setRequestMethod("POST");
httpurlConnection.setConnectTimeout(5000);
Stringdata="username="+username+"&password="+password+"&email="+email+"&phonenumber="+phonenumber;
OutputStreamoutputStream=httpurlConnection.getOutputStream();
outputStream.write(data.getBytes());
//把當前的request發送到伺服器(安卓不允許在主線程內做耗時操作,如連接伺服器)
httpurlConnection.connect();
//發送完連接後等待操作,這個是阻塞式方法,
intresponseCode=httpurlConnection.getResponseCode();
//根據得到的響應代碼和response的信息作出相應的操作
if(responseCode==200){
//從伺服器讀取正確與否的信息
InputStreamis=httpurlConnection.getInputStream();
byte[]buffer=newbyte[1024];
intread=is.read(buffer);
Stringresult=newString(buffer,0,read);
//由於子線程不允許做UI更新操作,與要通過Handler進行和主線程的通信操作
Messagemsg=newMessage();
msg.what=1;
handler.sendMessage(msg);
}else{
Messagemsg=newMessage();
msg.what=-1;
handler.sendMessage(msg);
}
}catch(MalformedURLExceptione){
e.printStackTrace();
}catch(IOExceptione){
e.printStackTrace();
}
}
}).start();
② android手機怎麼才能直接打開URL鏈接文件
在安卓代碼中調用瀏覽器來打開相應的網頁,通常可以通過Intent的方式實現。首先,你需要確保你的AndroidManifest.xml文件中已經添加了互聯網訪問許可權。這一步驟至關重要,因為沒有網路許可權,程序將無法正常執行。
接下來,你需要在你的Activity中創建一個Intent對象,並設置其action屬性為Intent.ACTION_VIEW。然後,通過setData()方法設置Intent對象的Uri參數,這個參數應該是一個指向你要打開的網頁的URL。
在設置完Intent對象後,你可以通過startActivity()方法啟動瀏覽器來顯示該網頁。例如,你可以這樣寫代碼:Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.example.com")); startActivity(intent)。
需要注意的是,有時候直接使用上述方法可能無法成功打開網頁,特別是在使用自定義Scheme的情況下。這時,你可以嘗試使用WebView來載入網頁。首先,在你的Activity布局文件中添加一個WebView組件,然後在Activity的代碼中初始化WebView並設置其設置,最後使用loadUrl()方法載入URL。
另外,你還可以考慮使用第三方庫來簡化這個過程,比如Universal-Web-Viewer。使用這種方法,你可以直接通過簡單的API調用打開網頁,而不需要自己處理WebView的配置。
為了確保程序能夠正確運行,你還需要在AndroidManifest.xml文件中聲明WebView需要的許可權,例如ACCESS_NETWORK_STATE和INTERNET。同時,確保你的應用具有適當的許可權,以便能夠訪問互聯網。
通過上述步驟,你就可以在安卓設備上實現直接打開URL鏈接文件的功能了。這不僅方便了用戶,也提升了應用的功能性和用戶體驗。
在實際開發中,你還需要考慮到網路狀態和許可權問題,確保在無網路或缺乏相應許可權的情況下給出合適的提示或處理。
總之,通過使用Intent或WebView,你可以輕松地在安卓應用中打開網頁,為用戶提供更加便捷的服務。
③ android get/post如何實現多參數請求
可使用android自帶的httpclient框架實現。
GET 方式傳遞參數
//先將參數放入List,再對參數進行URL編碼
List<BasicNameValuePair> params = new LinkedList<BasicNameValuePair>();
params.add(new BasicNameValuePair("param1", "數據")); //增加參數1
params.add(new BasicNameValuePair("param2", "value2"));//增加參數2
String param = URLEncodedUtils.format(params, "UTF-8");//對參數編碼
String baseUrl = "伺服器介面完整URL";
HttpGet getMethod = new HttpGet(baseUrl + "?" + param);//將URL與參數拼接
HttpClient httpClient = new DefaultHttpClient();
try {
HttpResponse response = httpClient.execute(getMethod); //發起GET請求
Log.i(TAG, "resCode = " + response.getStatusLine().getStatusCode()); //獲取響應碼
Log.i(TAG, "result = " + EntityUtils.toString(response.getEntity(), "utf-8"));//獲取伺服器響應內容
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
2.POST方式 方式傳遞參數
//和GET方式一樣,先將參數放入List
params = new LinkedList<BasicNameValuePair>();
params.add(new BasicNameValuePair("param1", "Post方法"));//增加參數1
params.add(new BasicNameValuePair("param2", "第二個參數"));//增加參數2
try {
HttpPost postMethod = new HttpPost(baseUrl);//創建一個post請求
postMethod.setEntity(new UrlEncodedFormEntity(params, "utf-8")); //將參數填入POST Entity中
HttpResponse response = httpClient.execute(postMethod); //執行POST方法
Log.i(TAG, "resCode = " + response.getStatusLine().getStatusCode()); //獲取響應碼
Log.i(TAG, "result = " + EntityUtils.toString(response.getEntity(), "utf-8")); //獲取響應內容
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}