2016-08-29 116 views
2

我建立一個應用程序中,用戶可以選擇他/她的性別,喜歡的食物,他們的憤怒,最喜歡的顏色,他們的年齡等..通過HTTP GET將數據發送到PHP服務器

我通過這些數據到我的最終活動與意圖。 現在我試圖將答案發送到一個PHP服務器(工作正常)並得到一個答案(哪個城市最適合你)

這是我的代碼,我不知道它是什麼問題(我已經添加到連接到互聯網) 當我運行的應用程序,直到被點擊的最後一項活動,它工作正常的權限,那麼它強制關閉應用程序

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清單文件

<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)  
+0

你能發佈你收到的錯誤嗎? – tpk

+1

我們看到出了什麼問題。你也可以看到它。而你沒有告訴你的應用真的發生了什麼。那麼,如果你看看LogCat,你就會知道出了什麼問題。張貼相關的行。 – greenapps

+0

執行此代碼後有什麼問題?發佈logcat的相關行。 –

回答

1

,因爲你正試圖執行UI線程聯網操作您收到此異常。除此之外,您可以在另一個線程中執行網絡操作,或者實施一些更好的方法,最終將操作置於另一個線程中。這些更好的方法是使用AsyncTask或使用Volley。我肯定會爲Volley投票,因爲它簡單而整潔。

GET操作實施抽射,

// 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); 

中序凌空工作,你應該在你的gradle產出增加的依賴。 在您的Gradle文件(模塊:應用程序)中,在依賴關係中添加compile 'com.android.volley:volley:1.0.0'

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

Learn more about Volley

編碼愉快!

相關問題