2015-01-31 55 views
2

我想在android設備上讀取某些日期,我已經加載到物理服務器上的mysql數據庫中。 提取數據的數據庫和php腳本都可以。 問題是android編碼方面。當從PHP服務器GET'ing數據時,應用程序崩潰加載

public class MainActivity extends Activity { 
    public HttpResponse response; 
    public String str; 

    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     HttpClient httpclient = new DefaultHttpClient(); 
     HttpPost httppost = new HttpPost("/*phpAddressIsCorrect*/"); 

     try { 
      response = httpclient.execute(httppost); 
     } 
     catch(IOException e) { 
      e.printStackTrace(); 
     } 

     try { 
      str = EntityUtils.toString(response.getEntity()); 
     } catch(IOException e){ 
      e.printStackTrace(); 
     } 

     Toast.makeText(getBaseContext(), str, Toast.LENGTH_LONG).show(); 
    } 
} 

main.xml只是一個RelativeLayout

使用互聯網的android權限,應用程序在加載時崩潰。我想這是因爲IOException,不是嗎?

回答

1

網絡總是需要在另一個線程(而不是UiThread)中完成。

new Thread() { 
    public void run() { 
     HttpURLConnection con = (HttpURLConnection) new URL("http://xyz").openConnection(); 
     String response = StreamToString(con.getInputStream()); 
     // ... 
    } 
}.start(); 

public static String StreamToString(java.io.InputStream is) { 
    java.util.Scanner scanner = new java.util.Scanner(is); 
    scanner.useDelimiter("\\A"); 
    String ret = scanner.hasNext() ? scanner.next() : ""; 
    scanner.close(); 
    return ret; 
} 
+0

感謝了很多,所以我要創建主○startIntentService它是一個backgroundThread? – 2015-02-01 13:05:57

+0

我發佈的線程在後臺執行。所以,只需複製我的答案,並做你的解析東西等我寫了三個點。請記住,您無法更改另一個線程中的UI(在此背景線程內創建[runOnUiThread](http://stackoverflow.com/a/27992603/4193263))。另外請記住,網絡需要一些時間,如果您從onClickListener中讀取它們,您的變量可能未初始化。 – ByteHamster 2015-02-01 13:26:12

+0

非常感謝您的幫助,非常有用! – 2015-02-05 18:59:57

相關問題