需要从我的Android设备访问localhost

时间:2013-04-05 03:15:00

标签: php android mysql

我在以下文件夹中有一个php文件:

C:\wamp\www\android_test\fetch_data2

我需要能够从我的应用程序访问此文件,但目前无法访问它。这是我的Java代码,我将重点介绍我需要修复的地方。我可以通过localhost / android_data ......从我的电脑访问php文件,但我无法通过手机浏览器访问它。此外,我没有在随附的xml文件中编写代码,也许这就是为什么我的php文件没有显示在应用程序上。

补充说明:我只是想让我的应用程序显示这个连接到mysql数据库并输出的php文件:

 [{"name":"User1","received_power":"-75.12207037710479","tower":"4","status":"0"},{"name":"User2","received_power":"18.89454151068304","tower":"3","status":"0"}]

我的名为MySQLData.java的java文件包含以下内容:

package com.example.qosmetre2;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import android.app.Activity;
import android.net.ParseException;
import android.os.Bundle;
import android.util.Log;
import android.widget.Toast;
import java.util.ArrayList; 
import java.util.HashMap; 
import java.util.List; 

import org.apache.http.NameValuePair; 
import org.json.JSONArray; 
import org.json.JSONException; 
import org.json.JSONObject; 

import android.app.ListActivity; 
import android.app.ProgressDialog; 
import android.content.Intent; 
import android.os.AsyncTask; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.View; 
import android.widget.AdapterView; 
import android.widget.AdapterView.OnItemClickListener; 
import android.widget.ListAdapter; 
import android.widget.ListView; 
import android.widget.SimpleAdapter; 
import android.widget.TextView;

public class MySQLData extends ListActivity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        String result = null;
        InputStream is = null;
        StringBuilder sb=null;
        //String result=null;
        ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
        //http post

        try{
            HttpClient httpclient = new DefaultHttpClient();
            HttpPost httppost = new HttpPost("http://174.112.97.111/android_test/fetch_data2.php");
            httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
            HttpResponse response = httpclient.execute(httppost);
            HttpEntity entity = response.getEntity();
            is = entity.getContent();
        }catch(Exception e){
            Log.e("log_tag", "Error in http connection"+e.toString());
        }

        //convert response to string

        try{
            BufferedReader reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"),8);
            sb = new StringBuilder();
            sb.append(reader.readLine() + "\n");
            String line="0";
            while ((line = reader.readLine()) != null) {
                sb.append(line + "\n");
            }

            is.close();
            result=sb.toString();

        }catch(Exception e){

            Log.e("log_tag", "Error converting result "+e.toString());
        }
        //paring data

        String nam;
        int rec_pow;
        int tow;
        int stat;

        try{
        JSONArray jArray = new JSONArray(result);
        JSONObject json_data=null;

        for(int i=0;i<jArray.length();i++){
                json_data = jArray.getJSONObject(i);
                nam=json_data.getString("name");
                rec_pow=json_data.getInt("recieved_power");
                tow=json_data.getInt("tower");
                stat=json_data.getInt("status");

        }

        }catch(JSONException e1){
            Toast.makeText(getBaseContext(), "Could not Parse Data", Toast.LENGTH_LONG).show();
        }catch (ParseException e1){
            e1.printStackTrace();

        }

    }

}

还有另一个名为MainActivity.java的文件除了默认内容之外什么都没有内容,并且有一个名为main_activity.xml的xml文件,其中没有任何内容。

这是我的andoidmanifest.xml:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.qosmetre2"
android:versionCode="1"
android:versionName="1.0" >

<uses-sdk
    android:minSdkVersion="11"
    android:targetSdkVersion="17" />

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <activity
        android:name="com.example.qosmetre2.MainActivity"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
     <activity
        android:name=".MySQLData"
        android:label="All the Data" > 
    </activity> 

</application>

1 个答案:

答案 0 :(得分:2)

如果两个设备在同一个网络上,并且您只在家中使用此应用程序/连接到同一网络,那么您可以使用路由器分配给您的计算机的本地IP地址,像192.168.1.4

这样的东西

如果您想要在3G / 4G或远离计算机的其他WiFi连接上使用此应用程序,则需要编辑路由器端口转发设置,然后使用路由器的IP连接到它地址。您还可以注册连接到该IP地址的免费域名,这样您就不必记住一堆数字。

这不是编码问题......