我正在构建一个应用程序,用户可以在其中选择他/她的性别、最喜欢的食物、他们的愤怒、最喜欢的颜色、他们的年龄等等......
我通过 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'
}
编码愉快!
关于java - 通过 HTTP GET 发送数据到 PHP 服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39216651/