Android - 从资产

时间:2015-11-01 18:54:41

标签: java php android

我需要在我的应用中使用带有文本输出的PHP脚本。 我有以下代码:

import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import java.io.ByteArrayOutputStream;
import java.io.IOException;

import org.apache.http.*;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;


public class Fourth_Fragment extends Fragment {
    View myView4;
    //TextView textl;

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        myView4 = inflater.inflate(R.layout.fourth_layout, container, false);

        //textl = (TextView)myView4.findViewById(R.id.LoungeTest);
        //textl.setText(outputlog);
        final String url = "file:///android_asset/lounge.php";
        new Thread() {
            @Override
            public void run() {
                try {
                    HttpClient httpclient = new DefaultHttpClient();
                    HttpResponse response = httpclient.execute(new HttpGet(url));
                    StatusLine statusLine = response.getStatusLine();
                    if (statusLine.getStatusCode() == HttpStatus.SC_OK) {
                        ByteArrayOutputStream out = new ByteArrayOutputStream();
                        try {
                            response.getEntity().writeTo(out);
                            out.close();
                        } catch (IOException e) {
                        }
                        String responseString = out.toString();
                        //..more logic
                    } else {
                        //Closes the connection.
                        try {
                            response.getEntity().getContent().close();
                            throw new IOException(statusLine.getReasonPhrase());
                        } catch (IOException e) {
                        }
                    }
                }
                catch (ClientProtocolException e)
                {

                }
                catch (IOException e)
                {

                }
            }
        }.start();

        return myView4;
    }




}

这是logcat:

11-01 19:47:24.784 1454-1454 W/System.err: java.io.IOException: Error running exec(). Command: [php, android.content.res.AssetManager$AssetInputStream@1e44a661] Working Directory: null Environment: null
11-01 19:47:24.794 1454-1454 W/System.err:     at java.lang.ProcessManager.exec(ProcessManager.java:211)
11-01 19:47:24.794 1454-1454 W/System.err:     at java.lang.Runtime.exec(Runtime.java:173)
11-01 19:47:24.794 1454-1454 W/System.err:     at java.lang.Runtime.exec(Runtime.java:246)
11-01 19:47:24.794 1454-1454 W/System.err:     at java.lang.Runtime.exec(Runtime.java:189)
11-01 19:47:24.794 1454-1454 W/System.err:     at myapp.test.Fourth_Fragment.execPHP(Fourth_Fragment.java:48)
11-01 19:47:24.794 1454-1454 W/System.err:     at myapp.test.Fourth_Fragment.onCreateView(Fourth_Fragment.java:33)
11-01 19:47:24.794 1454-1454 W/System.err:     at android.support.v4.app.Fragment.performCreateView(Fragment.java:1962)
11-01 19:47:24.794 1454-1454 W/System.err:     at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1016)
11-01 19:47:24.794 1454-1454 W/System.err:     at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1197)
11-01 19:47:24.794 1454-1454 W/System.err:     at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:738)
11-01 19:47:24.794 1454-1454 W/System.err:     at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1562)
11-01 19:47:24.794 1454-1454 W/System.err:     at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:483)
11-01 19:47:24.794 1454-1454 W/System.err:     at android.os.Handler.handleCallback(Handler.java:739)
11-01 19:47:24.794 1454-1454 W/System.err:     at android.os.Handler.dispatchMessage(Handler.java:95)
11-01 19:47:24.794 1454-1454 W/System.err:     at android.os.Looper.loop(Looper.java:135)
11-01 19:47:24.794 1454-1454 W/System.err:     at android.app.ActivityThread.main(ActivityThread.java:5253)
11-01 19:47:24.794 1454-1454 W/System.err:     at java.lang.reflect.Method.invoke(Native Method)
11-01 19:47:24.794 1454-1454 W/System.err:     at java.lang.reflect.Method.invoke(Method.java:372)
11-01 19:47:24.794 1454-1454 W/System.err:     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
11-01 19:47:24.794 1454-1454 W/System.err:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
11-01 19:47:24.794 1454-1454 W/System.err: Caused by: java.io.IOException: Permission denied
11-01 19:47:24.794 1454-1454 W/System.err:     at java.lang.ProcessManager.exec(Native Method)
11-01 19:47:24.794 1454-1454 W/System.err:     at java.lang.ProcessManager.exec(ProcessManager.java:209)
11-01 19:47:24.794 1454-1454 W/System.err:  ... 19 more

AndroidManifest:

...
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.WRITE_INTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.READ_INTERNAL_STORAGE" />

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".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>
    </application>
...

那么有没有办法,如何在Android Java App中使用文本输出(作为字符串)执行PHP脚本(filce位于assets文件夹中)?感谢

2 个答案:

答案 0 :(得分:2)

  

如何在带有文本输出的Android java App中执行PHP脚本(filce位于assets文件夹中)(作为字符串)?

不是真的。 Android没有内置PHP解释器。 PHP是Web服务器通常使用的技术; Android也没有内置的Web服务器。

欢迎您尝试为Android找到PHP解释器,然后尝试弄清楚如何使用它来执行您的PHP脚本。最有可能的是,首先摆脱PHP脚本会更好。

答案 1 :(得分:0)

首先,我认为您的网址有误,

final String url = "file:///android_asset/lounge.php";

必须像

final String url = "http://127.0.0.1/android_asset/lounge.php"; 

其中127.0.0.1用于localhost。

用于本地系统。