閱讀內容時,所以我有一個類有以下故障:嘗試從URL
class NetworkRequest extends AsyncTask<String, StringBuilder, String> {
@Override
public String doInBackground(String... urls) {
try
{
URL url = new URL(urls[0]);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
InputStream inputStream = url.openStream();
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"));
StringBuilder stringBuilder = new StringBuilder();
int cp;
while ((cp = bufferedReader.read()) != -1)
{
stringBuilder.append((char) cp);
}
return stringBuilder.toString();
}
catch(Exception ex)
{
return null;
}
}
public void onPostExecute(String string)
{
}
}
而且它在這裏被稱爲:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_mediated);
TextView welcome_txt = (TextView) findViewById(R.id.test_view);
new NetworkRequest().execute("https://graph.facebook.com/me");
NetworkRequest networkRequest = new NetworkRequest();
String string = networkRequest.doInBackground();
test_view.setText(string);
}
當這樣執行我與「無回「這說明它正在落在doInBackground方法的捕獲聲明中,我得到一個例外:
android.os.NetworkOnMainThreadException
有沒有人明白我在做什麼錯了?
您直接在主線程上調用doInBackground方法。通常這種方法是通過執行執行來執行的,您已經在執行這個方法... –
NetworkRequest networkRequest = new NetworkRequest(); String string = networkRequest.doInBackground(); 返回字符串;刪除這三條線。並且在你的textview中設置doInBackgroud的結果來實現一個體面的onPostExecute。 – greenapps
AsyncTask將其更改爲AsyncTask –
greenapps