我需要在我的应用中使用带有文本输出的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文件夹中)?感谢
答案 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。
用于本地系统。