http://examples.javacodegeeks.com/android/core/os/asynctask/android-asynctask-example/
得到一個想法,如何使用的AsyncTask我的項目,一切順利的話,而且幾乎沒有只有一個小問題; Android的最佳做法是使用碎片來處理所有的GUI ...
上次我嘗試使用碎片並沒有那麼困難,所以我認爲我可以直接跳到它並遵循教程最好的我可以...
長話短說,程序崩潰每次我打的按鈕加載的WebView
這裏的時間是我的片段:
package com.wausoft.app;
import android.app.Fragment;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.webkit.WebView;
import android.widget.Button;
import android.widget.Toast;
import java.net.URL;
import java.util.ArrayList;
public class MainFragment extends Fragment {
protected ArrayList<Button> buttons = new ArrayList<Button>();
protected View.OnClickListener listener = new View.OnClickListener() {
@Override
public void onClick(View view) {
switch(view.getId()) {
case R.id.btn_dummy:
dummyFunc(view);
break;
case R.id.btn_load:
readWebpage();
break;
}
}
};
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_main, container, false);
buttons.add((Button) view.findViewById(R.id.btn_load));
buttons.add((Button) view.findViewById(R.id.btn_dummy));
for(Button btn : buttons) btn.setOnClickListener(listener);
return view;
}
public void dummyFunc(View view) {
Toast.makeText(view.getContext(), "Button Clicked", Toast.LENGTH_SHORT).show();
}
public void readWebpage() {
try {
URL url = new URL("http://www.example.com/");
LoadWebpageAsync task = new LoadWebpageAsync();
task.execute(url);
} catch(Exception e) {
Log.v("DEBUG: ", e.getMessage());
}
}
private class LoadWebpageAsync extends AsyncTask<URL, Void, String> {
@Override
protected String doInBackground(URL... urls) {
try {
WebView webView = (WebView) getView().findViewById(R.id.web_view);
webView.getSettings().setJavaScriptEnabled(true); // program crashes here
webView.loadUrl(urls[0].toString());
} catch (Exception e) {
Log.v("DEBUG: ", e.getMessage());
}
return null;
}
@Override
protected void onPostExecute(String s) {
}
}
}
並記錄在案;這是我得到的錯誤消息:
01-10 17:09:52.544 23959-24282/? V/DEBUG:﹕ java.lang.Throwable: A WebView method was called on thread 'AsyncTask #1'. All WebView methods must be called on the same thread. (Expected Looper Looper (main, tid 1) {41e2e8d8} called on null, FYI main Looper is Looper (main, tid 1) {41e2e8d8})
那麼你們誰能告訴我如何解決這個問題?如果不擺脫的AsyncTask或者是片段的...
從我得到的回答,我結束這一:找到一個更好的教程...謝謝你們!
擺脫asynctask。 webview是一個視圖,爲什麼你想在後臺線程中。沒有意義 – Raghunandan
@Raghunandan這整個點是使用AsyncTask,如果我擺脫它,它消除了程序的整個目的 –
你所做的是錯誤的。你應該使用asynctask如果你正在做的事情不涉及像網絡操作一樣更新ui – Raghunandan