Ориентация экрана и AsynTask Android
Есть проблема.
AsynTask грузит данные по JSON, так вот, если во время загрузки повернуть экран, то приложение выпадает. Как решить эту задачу? Помогите. Вот код всего активити:
public class MainActivity extends Activity {
private ProgressDialog pDialog;
ListView list;
private ArrayList<HashMap<String, String>> keyList;
// Adapter adapter;
String baseURL="http://echo.jsontest.com/key1/value1/key2/value2/key3/value3/key4/value4";
private static final String KEY4 = "key4";
private static final String KEY3 = "key3";
private static final String KEY2 = "key2";
private static final String KEY1 = "key1";
ListAsynTask lat;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
list = (ListView)findViewById(R.id.list);
new ListAsynTask().execute(baseURL);
}
public class ListAsynTask extends AsyncTask<String,Void, Boolean> {
@Override
protected void onPreExecute() {
super.onPreExecute();
pDialog = new ProgressDialog(MainActivity.this);
pDialog.setMessage("Подождите...идет загрузка");
pDialog.setIndeterminate(false);
pDialog.setCancelable(false);
pDialog.show();
}
@Override
protected Boolean doInBackground(String... params) {
try {
HttpClient client = new DefaultHttpClient();
HttpGet get = new HttpGet(params[0]);
HttpResponse response = client.execute(get);
int status = response.getStatusLine().getStatusCode();
if (status == 200) {
HttpEntity entity = response.getEntity();
String data = EntityUtils.toString(entity);
JSONObject json = new JSONObject(data);
keyList = new ArrayList<HashMap<String, String>>();
HashMap<String, String> neww = new HashMap<String, String>();
Iterator itr = json.keys();
while (itr.hasNext()) {
String key = itr.next().toString();
neww.put(key, (String) json.get(key));
keyList.add(neww);
}
}
return true;
} catch (JSONException e1) {
e1.printStackTrace();
} catch (ClientProtocolException e1) {
e1.printStackTrace();
} catch (IOException e1) {
e1.printStackTrace();
}
return true;
}
@Override
protected void onPostExecute(Boolean result) {
super.onPostExecute(result);
if (pDialog.isShowing())
pDialog.dismiss();
ListAdapter adapter = new SimpleAdapter(
MainActivity.this, keyList,
R.layout.items,new String[]{KEY4, KEY3,KEY2,KEY1 }, new int[]{R.id.key4,R.id.key3,R.id.key2,R.id.key1});
list.setAdapter(adapter);
}
}
}
Источник: Stack Overflow на русском