2013-08-24 3 views
-1

я настроил сервер в моем собственном компьютере с помощью 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> 

ответ

0

Хотя вы могли бы добавить в LogCat, это, скорее всего, почему приложение не может получить содержание:

static String yahooStackInfo = "http://localhost/21/test03.php"; 

Это указывает устройству Android, чтобы попытаться получить доступ к нему. Localhost - это устройство. замените это именем хоста или IP-адресом вашего хоста.

Возможно, вам также потребуется проверить настройки брандмауэра ...

Update

Обновленный с IP в комментарии:

static String yahooStackInfo = "http://223.18.60.177/21/test03.php"; 
+0

извините, я все еще довольно запутан. Можете ли вы подробнее рассказать о , почему android не смог подключиться к серверу, как это static String yahooStackInfo = "http: //localhost/21/test03.php"; –

+2

localhost - это обратный адрес. Он всегда указывает на то же устройство, где выполняется код. Прочтите «Подключайтесь к себе». Когда вы запускаете этот код на Android, он пытается подключиться к серверу на устройстве Android. Но на вашем устройстве Android нет сервера. Используйте IP-адрес вашей локальной сети. Убедитесь, что ваш брандмауэр на ПК подключает входящие порты 80. http://en.wikipedia.org/wiki/Localhost – Tseng

+0

например, если мой IP-адрес 223.18.60.177 Должен ли я просто набирать эту статическую строку yahooStackInfo = "223.18.60.177"; но я хочу подключиться к этому файлу test03.php на своем компьютере, а не только в ip-адресе. –

0

Вы должны использовать:

http://10.0.2.2/21/test03.php

10.0.2.2 это специальный псевдоним для хост-шлейфом интерфейс (т. е. 127.0.0.1 на вашей машине разработки)

См.: Emulator Network Address Space в официальных документах

+0

грустно сказать. но он все еще не работает. Я проверил брандмауэр на панели управления xampp –

+0

Я использую Wi-Fi для подключения к Интернету. –

+0

всего в секунду. все работает, и это потрясающе. Спасибо всем вам, ребята. это помогает много. Хотя он ничего не показывает, когда я набираю http://10.0.2.2/21/test03.php в браузере. Но он работает в android немного подключен, но очень полезен. –