я настроил сервер в моем собственном компьютере с помощью XAMPP и я пытаюсь получить доступ к серверу в моем приложении, как это:почему я не могу подключить приложения на собственный сервер
package com.example.connect2php;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.params.BasicHttpParams;
import org.json.JSONException;
import org.json.JSONObject;
import android.os.AsyncTask;
import android.os.Bundle;
import android.app.Activity;
import android.util.Log;
import android.view.Menu;
import android.widget.TextView;
класс MainActivity общественности расширяет активность {
static String yahooStackInfo = "http://localhost/21/test03.php";
static String stockSymbol = "";
static String stockDaysLow = "";
static String stockDaysHigh = "";
static String stockChange = "";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
new MyAsyncTask().execute();
}
private class MyAsyncTask extends AsyncTask<String, String, String> {
@Override
protected String doInBackground(String... parms) {
// TODO Auto-generated method stub
DefaultHttpClient httpclient = new DefaultHttpClient(
new BasicHttpParams());
HttpPost httppost = new HttpPost(yahooStackInfo);
httppost.setHeader("Content-type", "application/json");
InputStream inputStream = null;
String result = null;
try {
HttpResponse response = httpclient.execute(httppost);
HttpEntity entity = response.getEntity();
inputStream = entity.getContent();
BufferedReader reader = new BufferedReader(
new InputStreamReader(inputStream, "UTF-8"), 8);
StringBuilder theStringBuilder = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null) {
theStringBuilder.append(line + "\n");
}
result = theStringBuilder.toString();
}
catch (Exception e) {
e.printStackTrace();
}
finally {
try {
if (inputStream != null)
inputStream.close();
}
catch (Exception e) {
e.printStackTrace();
}
}
JSONObject jsonObject;
try {
result = result.substring(7);
result = result.substring(0, result.length() - 2);
// Log.v("JSONParser RESULT " , result);
jsonObject = new JSONObject(result);
JSONObject queryJSONObject = jsonObject.getJSONObject("query");
JSONObject resultsJSONObject = queryJSONObject
.getJSONObject("results");
JSONObject quoteJSONObject = resultsJSONObject
.getJSONObject("quote");
stockSymbol = quoteJSONObject.getString("symbol");
stockSymbol = quoteJSONObject.getString("DaysLow");
stockSymbol = quoteJSONObject.getString("DaysHigh");
stockSymbol = quoteJSONObject.getString("Change");
}
catch (JSONException e) {
e.printStackTrace();
}
return result;
}
@Override
protected void onPostExecute(String result) {
TextView line1 = (TextView) findViewById(R.id.line1);
TextView line2 = (TextView) findViewById(R.id.line2);
TextView line3 = (TextView) findViewById(R.id.line3);
line1.setText("Stack: " + stockSymbol + " : " + stockChange);
line2.setText("Days Low " + stockDaysLow);
line3.setText("Days High " + stockDaysHigh);
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
Но это не сработало. Серверный код просто:
echo 'cbfunc({"query":{"count":1,"created":"2013-08-24T13:38:58Z","lang":"en-US","results": {"quote":{"symbol":"MSFT","AverageDailyVolume":"47950000","Change":"+2.36","DaysLow":"34.00","DaysHigh":"35.20","YearLow":"26.26","YearHigh":"36.43","MarketCapitalization":"289.5B","LastTradePriceOnly":"34.75","DaysRange":"34.00 - 35.20","Name":"Microsoft Corpora","Symbol":"MSFT","Volume":"225493744","StockExchange":"NasdaqNM"}}}})';
Вот внутрибрюшинно деталь:
@ppeterka
Microsoft Windows [版本 6.1.7601]
Copyright (c) 2009 Microsoft Corporation. All rights reserved.
C:\Users\hcleeab>ipconfig/all
錯誤: 無法辨識或不完整的命令列。
使用方式:
ipconfig [/allcompartments] [/? | /all |
/renew [adapter] | /release [adapter] |
/renew6 [adapter] | /release6 [adapter] |
/flushdns | /displaydns | /registerdns |
/showclassid adapter |
/setclassid adapter [classid] |
/showclassid6 adapter |
/setclassid6 adapter [classid] ]
其中 адаптер 連線 名稱 (? 允許 使用 萬 用 字元 * 與, 請見 範例)
選項:
/? 顯示此說明訊息。
/all 顯示完整設定資訊。
/release 釋放指定介面卡的 IPv4 位址。
/release6 釋放指定介面卡的 IPv6 位址。
/renew 更新指定介面卡的 IPv4 位址。
/renew6 更新指定介面卡的 IPv6 位址。
/flushdns 清除 DNS 解析快取。
/registerdns 重新整理所有 DHCP 租用並重新登錄 DNS 名稱。
/displaydns 顯示 DNS 解析快取的內容。
/showclassid 顯示介面卡所有允許的 DHCP 類別識別碼。
/setclassid 修改 DHCP 類別識別碼。
/showclassid6 顯示介面卡允許的所有 IPv6 DHCP 類別識別碼。
/setclassid6 修改 IPv6 DHCP 類別識別碼。
預設 是 僅 顯示 每個 繫 結 到 TCP/IP 之 介面卡 的 IP 位址, 子 網路 遮罩 及 預設 閘 道.
對於 релиз 與 Renew, 如果 沒有 指定 介面卡 名稱, 則會 釋放 或 更新 所有 繫 結 到 TCP/IP 介面卡 的 IP 位址 租用.
對於 Setclassid 與 Setclassid6, 如果 沒有 指定 Classid, . 則將 移除 Classid
範例:
IPCONFIG ... 顯示 資訊 IPCONFIG/все ... 顯示 詳細 資訊 IPCONFIG/обновить ... 更新 所有 介面卡 IPCONFIG/обновить Е.Л. * ... 更所有 名稱 開頭 為 EL 的 連線 IPCONFIG/выпуск Con ... 釋放 所有 符合 的 連線, 例如 "Local Area Connection 1" 或 "Local Area Connection 2" IPCONFIG/allcompartments ... 顯示 所有區間 的 相關 資訊 IPCONFIG/allcompartments/все ... 顯示 所有 區間 的 詳細 資訊
C: \ Users \ hcleeab> IPCONFIG
Windows IP 設定
無線 區域 網路 介面卡 無線 網路 連線:
媒體 狀態. , , , , , , , , , , , .: 媒體 已 中斷 連線 連線 特定 DNS 尾 碼. , , , , , , , : Hgcbroadband.com
通道 介面卡 isatap.hgcbroadband.com:
媒體狀態 . . . . . . . . . . . . .: 媒體已中斷連線
連線特定 DNS 尾碼 . . . . . . . . : hgcbroadband.com
通道介面卡 6TO4 Adapter:
通道介面卡 Teredo Tunneling Pseudo-Interface:
預設閘道 . . . . . . . . . . . . .:
C:\Users\hcleeab>
извините, я все еще довольно запутан. Можете ли вы подробнее рассказать о , почему android не смог подключиться к серверу, как это static String yahooStackInfo = "http: //localhost/21/test03.php"; –
localhost - это обратный адрес. Он всегда указывает на то же устройство, где выполняется код. Прочтите «Подключайтесь к себе». Когда вы запускаете этот код на Android, он пытается подключиться к серверу на устройстве Android. Но на вашем устройстве Android нет сервера. Используйте IP-адрес вашей локальной сети. Убедитесь, что ваш брандмауэр на ПК подключает входящие порты 80. http://en.wikipedia.org/wiki/Localhost – Tseng
например, если мой IP-адрес 223.18.60.177 Должен ли я просто набирать эту статическую строку yahooStackInfo = "223.18.60.177"; но я хочу подключиться к этому файлу test03.php на своем компьютере, а не только в ip-адресе. –