2013-10-12 85 views
0

我最近開始在Android中開發程序,並且這個簡單的代碼有一個小問題。我試圖解析一個網站的標題並存儲在一個字符串中,但到目前爲止不成功。是不是因爲我在Async中沒有這樣做?或者它們可以成爲一個不同的問題?Android的簡單Jsoup代碼

http://s9.postimg.org/ikycjit9b/android.png

public class MainActivity extends Activity implements OnClickListener { 

    private Button btnSearch; 
    private EditText editTextCarReg; 

    protected void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     //------------------------------------------------- 
     btnSearch = (Button) findViewById(R.id.btnSearch); 
     btnSearch.setOnClickListener(this); 
     //------------------------------------------------ 
     editTextCarReg = (EditText) findViewById(R.id.editTextRegistration); 
     editTextCarReg.setOnClickListener(this); 

    } 


    public boolean onCreateOptionsMenu(Menu menu) 
    { 
     getMenuInflater().inflate(R.menu.main, menu); 
     return true; 
    } 


    public void example() throws IOException 
    { 
     Document doc = Jsoup.connect("http://http://9gag.com/").get(); 
     String title = doc.title(); 
    } 

    public void onClick(View v) 
    { 
     if(v.getId() == btnSearch.getId()) 
     { 
      try { 
       example(); 
      } catch (IOException e) 
      { 
       e.printStackTrace(); 
      } 
     } 


} 
} 
+0

非常感謝你,我嘗試Maxim和user1920666,他們工作。用戶1920666方式接縫更多'hackish'但它也更簡單。我想我現在會使用它,直到我在該主題上獲得更多經驗。獎勵! – Michal

回答

0

從日誌:

android.os.NetworkOnMainThreadException 

當應用程序試圖在其主線程進行聯網操作,拋出此異常。

運行Jsoup logicAsyncTask

(請確保您添加<uses-permission android:name="android.permission.INTERNET"/>以及)

您可以編寫類似:

class JsoupTask extends AsyncTask<String, Void, Void> { 

    private Exception exception; 

    protected void doInBackground(String... url) { 
     Document doc = Jsoup.connect(url).get(); 
     String title = doc.title(); 
     ... 

    } 

    protected void onPostExecute(RSSFeed feed) { 
     // here you can update your UI thread through Handler, for example 
    } 
} 

並調用,如:

new JsoupTask().execute(url); 
0
public static int SDK_INT = android.os.Build.VERSION.SDK_INT; 

寫此代碼之前您的要求

if (SDK_INT >= 10) { 
       ThreadPolicy tp = ThreadPolicy.LAX; 
       StrictMode.setThreadPolicy(tp); 
      } 

使用asynctask是更好的做法。