正確的我認爲就此而言,您應該認爲我是一個完整的noob,我在我的頭上。Android,使用異步任務從url抓取文本
我試圖從幾個部分教程中拼湊出我對它的理解,每個部分教程都涉及到我想要做的不同方面。
它的長短,我想要做的就是從URL中讀取文本以顯示在文本視圖中,我的理解是,自3.0更新以來,我需要一個AsyncTask來執行此操作。
任何幫助我出錯的地方都會很好,因爲我不明白是什麼導致了錯誤以及如何解決。
我知道,在3.0更新之前,doInBackground的try和catch中包含的代碼可以自行工作。不過,我也不知道這是否也需要修改才能使用Async。
我也想像其他問題可能會出現,一旦這個排序,如果有人發現明顯不明顯的東西,我會很感激,如果你能指出。
String Event;
TextView eventText;
TextView titleText;
String HTML;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.newevent);
titleText = (TextView) findViewById(R.id.Title);
eventText = (TextView) findViewById(R.id.Event);
new eventupdate().execute();
}
public class eventupdate extends AsyncTask<String, Void, Void> {
@Override
protected Void doInBackground(String... url) {
try {
Thread.sleep(4000);
HttpClient httpClient = new DefaultHttpClient();
HttpContext localContext = new BasicHttpContext();
HttpGet httpGet = new HttpGet(
"http://masterzangetsu.eu/Apps/rocksoctest"); // URL!
HttpResponse response = httpClient.execute(httpGet,
localContext);
String result = "";
BufferedReader reader = new BufferedReader(
new InputStreamReader(response.getEntity().getContent()));
String line = null;
while ((line = reader.readLine()) != null) {
result += line + "\n";
HTML = result;
}
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
eventText.setText("" + HTML);
// TODO Auto-generated method stub
return null;
}
}
而且logcat的錯誤是:
W/dalvikvm(394): threadid=9: thread exiting with uncaught exception (group=0x40015560)
E/AndroidRuntime(394): FATAL EXCEPTION: AsyncTask #1
E/AndroidRuntime(394): java.lang.RuntimeException: An error occured while executing doInBackground()
E/AndroidRuntime(394): at android.os.AsyncTask$3.done(AsyncTask.java:200)
E/AndroidRuntime(394): at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:274)
E/AndroidRuntime(394): at java.util.concurrent.FutureTask.setException(FutureTask.java:125)
E/AndroidRuntime(394): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:308)
E/AndroidRuntime(394): at java.util.concurrent.FutureTask.run(FutureTask.java:138)
E/AndroidRuntime(394): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088)
E/AndroidRuntime(394): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581)
E/AndroidRuntime(394): at java.lang.Thread.run(Thread.java:1019)
E/AndroidRuntime(394): Caused by: android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
E/AndroidRuntime(394): at android.view.ViewRoot.checkThread(ViewRoot.java:2932)
E/AndroidRuntime(394): at android.view.ViewRoot.requestLayout(ViewRoot.java:629)
E/AndroidRuntime(394): at android.view.View.requestLayout(View.java:8267)
E/AndroidRuntime(394): at android.view.View.requestLayout(View.java:8267)
E/AndroidRuntime(394): at android.view.View.requestLayout(View.java:8267)
E/AndroidRuntime(394): at android.view.View.requestLayout(View.java:8267)
E/AndroidRuntime(394): at android.widget.ScrollView.requestLayout(ScrollView.java:1291)
E/AndroidRuntime(394): at android.view.View.requestLayout(View.java:8267)
E/AndroidRuntime(394): at android.widget.RelativeLayout.requestLayout(RelativeLayout.java:257)
E/AndroidRuntime(394): at android.view.View.requestLayout(View.java:8267)
E/AndroidRuntime(394): at android.widget.TextView.checkForRelayout(TextView.java:5521)
E/AndroidRuntime(394): at android.widget.TextView.setText(TextView.java:2724)
E/AndroidRuntime(394): at android.widget.TextView.setText(TextView.java:2592)
E/AndroidRuntime(394): at android.widget.TextView.setText(TextView.java:2567)
E/AndroidRuntime(394): at com.MasterZangetsu.kentrocksoc.nextEvent$eventupdate.doInBackground(nextEvent.java:81)
E/AndroidRuntime(394): at com.MasterZangetsu.kentrocksoc.nextEvent$eventupdate.doInBackground(nextEvent.java:1)
E/AndroidRuntime(394): at android.os.AsyncTask$2.call(AsyncTask.java:185)
E/AndroidRuntime(394): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:306)