java - 通过 HTTP GET 发送数据到 PHP 服务器

标签 java php android

我正在构建一个应用程序,用户可以在其中选择他/她的性别、最喜欢的食物、他们的愤怒、最喜欢的颜色、他们的年龄等等......

我通过 Intent 将这些数据传递给了我的最终 Activity 。 现在我正在尝试将答案发送到 PHP 服务器(工作正常)并获得答案(哪个城市最适合你)

这是我的代码,我不知道它有什么问题(我已经添加了连接到互联网的权限) 当我运行该应用程序时,它工作正常,直到单击最后一个 Activity ,然后它强制关闭该应用程序

public class result extends AppCompatActivity {
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.result);


    TextView result = (TextView)findViewById(R.id.result);

    final String gender;
    Intent a = getIntent();
    gender = a.getStringExtra("gender");
    final String anger;
    Intent b = getIntent();
    anger = b.getStringExtra("hate");
    final String food;
    Intent c = getIntent();
    food = c.getStringExtra("food");
    final String gettowork;
    Intent d = getIntent();
    gettowork = d.getStringExtra("gotowork");
    final String settelment;
    Intent ee = getIntent();
    settelment = ee.getStringExtra("house");
    final String actor;
    Intent f = getIntent();
    actor = f.getStringExtra("star");
    final String weather;
    Intent g = getIntent();
    weather = g.getStringExtra("weather");
    final String weekend;
    Intent h = getIntent();
    weekend = h.getStringExtra("weekend");
    final String color;
    Intent j = getIntent();
    color = j.getStringExtra("color");
    final String age;
    Intent i10 = getIntent();
    age = i10.getStringExtra("age");


HttpClient httpclient = new DefaultHttpClient();
HttpGet httpget = new HttpGet("http://test123.com/games/whichcity/app/check-form.php?gender=" + gender + "&anger=" + anger + "&food=" + food + "&gettowork=" + gettowork + "&settlement=" + settelment + "&actor=" + actor + "&weather=" + weather + "&weekend=" + weekend + "&color=" + color + "&age=" + age);
    HttpResponse response = null;
    try {
        response = httpclient.execute(httpget);
    } catch (IOException e) {
        e.printStackTrace();
    }
    HttpEntity entity = response.getEntity();
    try {
        InputStream webs = entity.getContent();
        BufferedReader reader = new BufferedReader(new InputStreamReader(webs,"iso-8859-1"),8);
        result.setText(reader.readLine());
    } catch (IOException e) {
        e.printStackTrace();



}}}

Android list 文件

<application

    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    <activity android:name=".splash_screen">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

    <activity android:name=".MainActivity"></activity>
    <activity android:name=".firstquestion"></activity>
    <activity android:name=".secondquestion"></activity>
    <activity android:name=".thirdquestion"></activity>
    <activity android:name=".fourthquestion"></activity>
    <activity android:name=".fifthquestion"></activity>
    <activity android:name=".sixthquestion"></activity>
    <activity android:name=".seventhquestion"></activity>
    <activity android:name=".eighthquestion"></activity>
    <activity android:name=".ninethquestion"></activity>
    <activity android:name=".result"></activity>


</application>

<uses-permission android:name="android.permission.INTERNET" />

我在 logcat 中的错误:

E/AndroidRuntime: FATAL EXCEPTION: main                                                              java.lang.RuntimeException: Unable to start activity ComponentInfo{org.vaya_group.charactertest/org.vaya_group.charactertest.result}: android.os.NetworkOnMainThreadException
                                                                              at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2071)
                                                                              at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2096)
                                                                              at android.app.ActivityThread.access$600(ActivityThread.java:138)
                                                                              at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1207)
                                                                              at android.os.Handler.dispatchMessage(Handler.java:99)
                                                                              at android.os.Looper.loop(Looper.java:213)
                                                                              at android.app.ActivityThread.main(ActivityThread.java:4787)
                                                                              at java.lang.reflect.Method.invokeNative(Native Method)
                                                                              at java.lang.reflect.Method.invoke(Method.java:511)
                                                                              at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789)
                                                                              at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:556)
                                                                              at dalvik.system.NativeStart.main(Native Method)
                                                                           Caused by: android.os.NetworkOnMainThreadException
                                                                              at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1126)
                                                                              at java.net.InetAddress.lookupHostByName(InetAddress.java:385)
                                                                              at java.net.InetAddress.getAllByNameImpl(InetAddress.java:236)
                                                                              at java.net.InetAddress.getAllByName(InetAddress.java:214)
                                                                              at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:141)
                                                                              at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164)
                                                                              at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119)
                                                                              at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:360)
                                                                              at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
                                                                              at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
                                                                              at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)
                                                                              at org.vaya_group.charactertest.result.onCreate(result.java:86)
                                                                              at android.app.Activity.performCreate(Activity.java:5008)
                                                                              at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079)
                                                                              at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2035)
                                                                              at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2096) 
                                                                              at android.app.ActivityThread.access$600(ActivityThread.java:138) 
                                                                              at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1207) 
                                                                              at android.os.Handler.dispatchMessage(Handler.java:99) 
                                                                              at android.os.Looper.loop(Looper.java:213) 
                                                                              at android.app.ActivityThread.main(ActivityThread.java:4787) 
                                                                              at java.lang.reflect.Method.invokeNative(Native Method) 
                                                                              at java.lang.reflect.Method.invoke(Method.java:511) 
                                                                              at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789) 
                                                                              at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:556) 
                                                                              at dalvik.system.NativeStart.main(Native Method) 

最佳答案

您收到此异常是因为您正试图在 UI 线程中执行网络操作。取而代之的是,您可以在另一个线程中进行网络操作,或者实现一些更好的方法,最终将操作放在另一个线程中。这些更好的方法是使用 AsyncTask 或使用 Volley。我一定会投票给 Volley,因为它简单明了。

GET操作实现volley,

// Instantiate the RequestQueue.
RequestQueue queue = Volley.newRequestQueue(this);
String url ="http://test123.com/games/whichcity/app/check-form.php?gender=" + gender + "&anger=" + anger + "&food=" + food + "&gettowork=" + gettowork + "&settlement=" + settelment + "&actor=" + actor + "&weather=" + weather + "&weekend=" + weekend + "&color=" + color + "&age=" + age;

// Request a string response from the provided URL.
StringRequest stringRequest = new StringRequest(Request.Method.GET, url,
            new Response.Listener<String>() {
    @Override
    public void onResponse(String response) {
        //handle response from server
        result.setText(response);
    }
}, new Response.ErrorListener() {
    @Override
    public void onErrorResponse(VolleyError error) {
        //handle error
        result.setText("That didn't work!");
    }
});
// Add the request to the RequestQueue.
queue.add(stringRequest); 

为了让 Volley 工作,你应该在你的 gradle 中添加依赖。 在您的 Gradle 文件 (Module:app) 中,在依赖项中添加 compile 'com.android.volley:volley:1.0.0'

dependencies {
    compile 'com.android.volley:volley:1.0.0'
}

Learn more about Volley

编码愉快!

关于java - 通过 HTTP GET 发送数据到 PHP 服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39216651/

相关文章:

Android——可检查菜单项的问题

安卓滑动面板

java - 处理超过 100k 条数据记录

java - 从智能卡读取私钥以对XML文档进行数字签名

php - 我如何在 php 中确定给定日期的第 n 个工作日

javascript - 使用 php 而不是 javascript 重定向页面

Phpfox 短网址错误

用于互联网连接的 Android BroadcastReceiver 调用了两次

java - 如何为 Jmeter Junit Sampler 创建更详细的结果消息传递

java - 如何在Eclipse Tomcat项目中更新Jar/依赖项目?