我正在研究需要連接到位於同一網絡中另一臺計算機上的本地主機的Android應用程序。我沒有問題通過另一臺計算機連接到本地主機,但我如何通過android連接到本地主機?我正在使用android studio,並通過wamp使用MySql和php腳本創建了數據庫。將Android連接到Wamp服務器
回答
謝謝大家回答。最後我使用了Android Volley,它是另一個庫。你可以谷歌的教程。
謝謝Rafique Mohammed
文檔 - http://developer.android.com/training/volley/index.html
你必須把你的服務器放在網絡中。之後,您可以使用電腦的IpAdress進行訪問。 我從來沒有這樣做過Wamp服務器。
How to enable local network users to access my WAMP sites?
要連接您的Android手機,你可以使用HttpURLConnection類:http://developer.android.com/reference/java/net/HttpURLConnection.html
如果你想顯示你的網頁,你可以使用的WebView:http://developer.android.com/reference/android/webkit/WebView.html
這裏是我的類連接到服務器。 我在構造函數中加入了一個Listner。監聽器是一個實現接口的類。有了這個,你可以重寫接口的方法,當異步任務完成時(onPostExecute中的listner.onTaskCompleted),方法就是調用。
package controller;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.pm.ActivityInfo;
import android.os.AsyncTask;
import android.util.Log;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import javax.net.ssl.HttpsURLConnection;
/**
* Created by mwissle on 26/02/2016.
* Class permettant de récupérer le JSON depuis internet
*/
public class YourClassForConnection extends AsyncTask<String, String, String> {
private AsyncResponse listener;
HttpURLConnection conn = null; //New object HttpURLConnection
public YourClassForConnection(AsyncResponse listener){
this.listener=listener;
}
protected void onPreExecute() {
progress = new ProgressDialog(activity);
}
@Override
protected String doInBackground(String... params) {
String response = "";
String responseError = "";
try{
//Connect to URL
Log.d("JSON", "Start of connexion");
URL url = new URL(params[0]);
conn = (HttpURLConnection) url.openConnection();
conn.setReadTimeout(15000);
conn.setConnectTimeout(15000);
conn.connect();
int responseCode=conn.getResponseCode();
//HTTP_OK --> 200
//HTTP_CONFLICT --> 409
if (responseCode == HttpsURLConnection.HTTP_OK) {
String line;
BufferedReader br=new BufferedReader(new InputStreamReader(conn.getInputStream()));
while ((line=br.readLine()) != null) {
response+=line;
}
return response;
}
else if(responseCode == HttpURLConnection.HTTP_CONFLICT){
String line;
BufferedReader br=new BufferedReader(new InputStreamReader(conn.getErrorStream()));
while ((line=br.readLine()) != null) {
responseError+=line;
}
return responseError;
}
else {
return null;
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (conn != null){
conn.disconnect();
}
}
return null;
}
@Override
protected void onPostExecute(String result) {
try{
super.onPostExecute(result);
listener.onTaskCompleted(result);
}
catch(NullPointerException npe){
Log.d("NullPointerException", npe.getMessage());
}
}
}
嘿。我已經把服務器放到了網絡中。我可以訪問網絡中的服務器。 應該在android中給出什麼代碼,以便應用程序也可以連接到服務器? –
你想做什麼?你想顯示WebPage或調用Url的一些參數? – Eraseth
是否有可能在android代碼中使用url連接到我們的數據庫? –
「本地主機」地址總是隻指向您要從中調用它的設備。
示例:如果您從您的電腦中調用/導航到「localhost」,它將返回從您的電腦提供的內容。如果你在你的android設備上做同樣的事情,它會返回你從android設備提供的內容。
從我的理解你的問題是,你想從Android設備上的應用程序訪問你的wamp服務器。 這樣做,你應該從你的android應用程序的網絡請求到你的計算機的IP地址(而不是「localhost」),即運行一個wamp服務器。 您可以通過在cmd(windows)中調用「ipconfig」或在終端(linux)中調用「ifconfig」來獲取計算機的IP。
在你的應用程序中,你應該使用Http(s)URLConnection,你需要在非UI線程中使用它,所以它不會崩潰你的應用程序。你可以使用AsyncTask。
下面是該示例代碼:
public class DBqueryS extends AsyncTask<String,String,String>{
final Handler mHandler;
private static String urlLink = "";
public DBqueryS(Handler handler) {
urlLink = "YOUR_SERVER_ADDRESS";
mHandler = handler; //Handler from UI activity that will receive the request response when it arrives
Log.i("DBquery", "" + action);
}
@Override
protected String doInBackground(String... strings) {
//get execution parameters from strings
return postText();
}
@Override
protected void onPreExecute() {
super.onPreExecute();
//Do something before "doInBackground()"
}
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
//Do something after "doInBackground()"
mHandler.obtainMessage(HTTP_REQUEST_COMPLETE,s).sendToTarget();
}
private String postText(){
try{
// add request data
List<NameValuePair> nameValuePairs = new ArrayList<>(0);
nameValuePairs.add(new BasicNameValuePair("key",value));
Log.i("DBquery sent", nameValuePairs.toString());
// HttpClient
URL url = new URL(urlLink);
HttpsURLConnection connection = (HttpsURLConnection)url.openConnection();
connection.setReadTimeout(5000 /* milliseconds */);
connection.setConnectTimeout(3000 /* milliseconds */);
connection.setRequestMethod("POST"); //Can be GET,...
connection.setDoInput(true);
connection.setDoOutput(true);
// attach data
OutputStream os = connection.getOutputStream();
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(os,"UTF-8"));
writer.write(getQuery(nameValuePairs));
writer.flush();
writer.close();
os.close();
// execute HTTP post request
connection.connect();
// read response
int responseCode = connection.getResponseCode();
Log.i("DBqueryS", "Https response is: " + responseCode);
InputStream is = null;
is = connection.getInputStream();
String responseStr = readIt(is, 1);
if (responseStr != null) {
return responseStr;
}else{
Log.i("HTTP RESPONSE","NO RESPONSE");
}
} catch (ClientProtocolException e) {
Log.e("CONN_EXCEPTION", e.toString());
} catch (IOException e) {
Log.e("CONN_EXCEPTION",e.toString());
}
return "FAILED";
}
// Reads an InputStream and converts it to a String.
public String readIt(InputStream stream, int len) throws IOException {
String str = "";
Reader reader;
reader = new InputStreamReader(stream, "UTF-8");
char[] buffer = new char[len];
while(reader.read(buffer) > 0){
str+=String.valueOf(buffer);
}
Log.i("DBqueryS", "Read " + str.length() + " characters.");
if(str.length()>0)return str;
return null;
}
private String getQuery(List<NameValuePair> params) throws UnsupportedEncodingException{
StringBuilder result = new StringBuilder();
boolean first = true;
for (NameValuePair pair : params){
if (first)
first = false;
else
result.append("&");
result.append(URLEncoder.encode(pair.getName(), "UTF-8"));
result.append("=");
result.append(URLEncoder.encode(pair.getValue(), "UTF-8"));
}
return result.toString();
}
}
有關HttpsURLConnection的和的AsyncTask是指這些頁面的詳細信息: http://developer.android.com/reference/javax/net/ssl/HttpsURLConnection.html
http://developer.android.com/reference/android/os/AsyncTask.html
嘿。我實際上想知道在android應用程序中使用什麼代碼來連接到服務器。我已經知道如何使用IP地址連接。 –
- 1. 如何連接android到wamp服務器
- 2. 連接wakanda到wamp服務器
- 3. 連接到外部的wamp服務器
- 4. Android - 連接到wamp =服務器問候錯誤
- 5. 無法連接到WAMP服務器從Android應用
- 6. Wamp服務器到android物理設備連接?
- 7. Android應用程序到WAMP服務器連接
- 8. Android應用程序連接到本地區域Wamp服務器
- 9. 將android連接到openLDAP服務器
- 10. Android:將httpURLConnection連接到服務器
- 11. 如何將Android連接到服務器
- 12. 將我的應用程序連接到wamp服務器
- 13. 如何將vb.net連接到wamp服務器?
- 14. Android服務連接到服務器
- 15. WAMP與Live服務器的facebook連接
- 16. Android to Wamp使用Android Studio和PHP連接的服務器
- 17. php-mssql服務器數據庫連接使用wamp服務器
- 18. Android模擬器連接到服務器
- 19. 在Eclipse中使用WAMP服務器連接Android
- 20. 用本地的android模擬器連接到我的wamp服務器。網址
- 21. 無法連接到服務器(WAMP,phpMyAdmin的),VS連接到數據庫?
- 22. 將MySQL作爲鏈接服務器連接到SQL服務器
- 23. Wamp服務器無法連接到本地主機
- 24. 與ADODB連接到數據庫中WAMP服務器
- 25. 如何連接到WAMP服務器上的MySQL?
- 26. 用eclipse連接到wamp服務器的IOException錯誤?
- 27. 如何蟒蛇連接到服務器WAMP
- 28. 從wamp窗口遠程連接到mysql服務器數據庫
- 29. 將wamp服務器添加到aptana
- 30. 將android連接到網絡服務
您需要發送NetworkRequest爲localhost。使用HttpsURLConnection(http://developer.android.com/reference/javax/net/ssl/HttpsURLConnection。HTML),並確保您的Android設備和服務器連接到相同的網絡/無線 –
您還可以使用第三方庫,如AndroidVolley(只是谷歌的教程)這是一個網絡庫,它可以幫助您發送和從服務器接收數據 –