Я хочу читать данные, составляющие веб-сайт в Async-Task.
Но, хотя я звоню execute()
, он не входит в задачу Async.
Не вызывается даже метод preExecute()
, по крайней мере запись журнала, которая бы так говорила, не появляется.Почему моя AsyncTask не выполняется?
public class NewFragment extends Fragment {
private String mResult; //This Result will be returned by FetchDataTask()
private final String LOG_TAG = NewFragment.class.getSimpleName();
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
}
// fetch data from example.com and show them in textView
public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
FetchDataTask fetchDataTask = new FetchDataTask();
fetchDataTask.execute("http://example.com");
View rootView = inflater.inflate(R.layout.fragment_new,container,false);
TextView textView = (TextView) rootView.findViewById(R.id.textView);
textView.setText(mResult);
return rootView;
}
public class FetchDataTask extends AsyncTask<String, Integer, String >{
private final String LOG_TAG = FetchDataTask.class.getSimpleName();
@Override
protected void onPreExecute(){
Log.e(LOG_TAG,"onPreExecute()"); //This Log-entry doesn't appear, why??
}
@Override
protected String doInBackground(String... strings){
//http-connection:
HttpURLConnection httpURLConnection = null;
BufferedReader bufferedReader = null;
String result = "";
try{
URL url = new URL(strings[0]);
httpURLConnection = (HttpURLConnection) url.openConnection();
InputStream inputStream = httpURLConnection.getInputStream();
//read data:
if(inputStream==null){
Log.v(LOG_TAG,"There is nothin'");
} else {
bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
String line;
while ((line = bufferedReader.readLine()) != null) {
result += line + "\n";
}
}
}catch(Exception e){
Log.e(LOG_TAG, "Error in http connection"+e.toString());
} finally {
if(httpURLConnection!=null){
httpURLConnection.disconnect();
}
if(bufferedReader != null){
try{
bufferedReader.close();
}catch (final IOException e){
Log.e(LOG_TAG,"Error closing stream", e);
}
}
}
Log.e(LOG_TAG,"doInBackground()");
return result;
}
@Override
protected void onPostExecute(String string){
mResult=null;
if(string!=null){
mResult=string;
}
}
}
}
Можете ли вы показать код активности, содержащий ваш фрагмент или вы проверили Вызывается onCreateView()? –
@KevinLEGOFF onCreateView() работает ... – taxus1
, не связанный с неисполнением вашей асинтетики, но 'textView.setText (mResult);' не будет работать. Вы не делаете этого, когда асинтеза завершена, вы делаете это немедленно, когда задача еще не запущена. – njzk2