я так и делал но не получалось потом решил по экспериментировать добавить отсебятины, в общем нашел свою ошибку.gera писал(а):Проверяй что вернет getLastNonConfigurationInstance(). Если вернет null, то создай новый объект parse = new Parse().
Если бы ты внимательно читал урок, то заметил бы этот кодКод: Выделить всё
mt = (MyTask) getLastNonConfigurationInstance(); if (mt == null) { mt = new MyTask(); mt.execute(); }
Урок 91. AsyncTask. Поворот экрана
Re: Урок 91. AsyncTask. Поворот экрана
Re: Урок 91. AsyncTask. Поворот экрана
android:configChanges="keyboardHidden|orientation" кто может рассказать о нем побольше инфы. Спасибо заранее.
Re: Урок 91. AsyncTask. Поворот экрана
http://stackoverflow.com/questions/7818 ... rientationbehzodbek писал(а):android:configChanges="keyboardHidden|orientation" кто может рассказать о нем побольше инфы. Спасибо заранее.
R.id.team
Политика на форуме запрещена
Политика на форуме запрещена
Re: Урок 91. AsyncTask. Поворот экрана
занимаюсь свободным полетам на основе этого урока, так вот в общем получилось так что у меня два класса, в первой ListView, а во второй вынес экземпляр AsyncTask, так вот теперь не получается запустит прогресдиалог и скрыть ее, ниже код
Код: Выделить всё
public class MainActivity extends Activity {
static ListView lstView;
static ProgressDialog pd;
static ArrayAdapter<String> adapter;
static List<String> listTitle = new ArrayList<String>();
Async mt;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d("qwe", "create MainActivity: " + this.hashCode());
setContentView(R.layout.activity_main);
lstView = (ListView) findViewById (R.id.lvNews);
adapter = new ArrayAdapter<String>(MainActivity.this,
R.layout.list_news, listTitle);
lstView.setAdapter(adapter);
mt = (Async) getLastNonConfigurationInstance();
if (mt == null)
{
mt = new Async();
mt.execute();
}
mt.link(this);
Log.d("qwe", "create MyTask: " + mt.hashCode());
}
public Object onRetainNonConfigurationInstance()
{
mt.unlink();
return mt;
}
Код: Выделить всё
public class Async extends AsyncTask<Void, Integer, String> {
MainActivity activity;
void link(MainActivity act)
{
activity = act;
}
void unlink()
{
activity = null;
}
protected void onPreExecute()
{
MainActivity.pd.show();
MainActivity.pd.setMessage("work...");
}
@Override
protected String doInBackground(Void... params) {
MainActivity.listTitle.clear();
try
{
for(int i=0; i<10; i++)
{
TimeUnit.SECONDS.sleep(1);
publishProgress(i);
}
}
catch (InterruptedException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
protected void onProgressUpdate(Integer... cnt)
{
super.onProgressUpdate(cnt[0]);
Log.d("qwe", "i = " + cnt[0]
+ ", MyTask: " + this.hashCode()
+ ", MainActivity: " + activity.hashCode());
MainActivity.listTitle.add(cnt[0].toString());
MainActivity.adapter.notifyDataSetChanged();
}
protected void onPostExecute()
{
MainActivity.pd.dismiss();
}
}
Последний раз редактировалось 3Gern 07 янв 2013, 16:35, всего редактировалось 1 раз.
Re: Урок 91. AsyncTask. Поворот экрана
боже, как красиво, наименование класса с маленькой буквы, все поля статические))) читаем ещё раз основы ява...
R.id.team
Политика на форуме запрещена
Политика на форуме запрещена
Re: Урок 91. AsyncTask. Поворот экрана
статическим делал потому что со второго класса с ними работаю, название класса сделал заглавным.rezak90 писал(а):боже, как красиво, наименование класса с маленькой буквы, все поля статические))) читаем ещё раз основы ява...
Re: Урок 91. AsyncTask. Поворот экрана
и это по вашему правильно? по этому и предложил выучить/повторить ООП и Javaстатическим делал потому что со второго класса с ними работаю
R.id.team
Политика на форуме запрещена
Политика на форуме запрещена
Re: Урок 91. AsyncTask. Поворот экрана
A couple of methods on Activity have been deprecated, so you should no longer use them:
getLastNonConfigurationInstance()
onRetainNonConfigurationInstance()
Так что статья неактуальна, надо переделывать.
getLastNonConfigurationInstance()
onRetainNonConfigurationInstance()
Так что статья неактуальна, надо переделывать.
Re: Урок 91. AsyncTask. Поворот экрана
если присмотреться внимательней то не мало статей где уже гугл не рекомендует использовать те или иные подходы/методы
R.id.team
Политика на форуме запрещена
Политика на форуме запрещена
Re: Урок 91. AsyncTask. Поворот экрана
"Всё пропало, шеф!"
В общем, проблема такая - не работает!
У меня 2 класса - Main и Parser.
При нажатии на кнопку - вызывается новый Parser.
Чисто в теории - как в таком случае сохранить информацию при повороте?
В общем, проблема такая - не работает!
У меня 2 класса - Main и Parser.
При нажатии на кнопку - вызывается новый Parser.
Чисто в теории - как в таком случае сохранить информацию при повороте?
Re: Урок 91. AsyncTask. Поворот экрана
почему до сих пор никто не сказал что, все, что описано в статье - костыль и нужно использовать AsyncTaskLoader?
Re: Урок 91. AsyncTask. Поворот экрана
Тут такая ситуация: динамически подгружаю данные и вывожу их в список. Как только прокрутил до конца страницы, подгружаю очередную порцию данных.
Подгрузка идет в AsyncTask, который, в свою очередь находится в setOnScrollListener
Как сделать так, чтобы в такой ситуации поворот экрана не ломал жизнь?
Как исправить? А то падает все это дело
Подгрузка идет в AsyncTask, который, в свою очередь находится в setOnScrollListener
Как сделать так, чтобы в такой ситуации поворот экрана не ломал жизнь?
Код: Выделить всё
listView.setOnScrollListener(new OnScrollListener() {
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
int lastScreen = firstVisibleItem + visibleItemCount;
if ((lastScreen) == totalItemCount) {
if ((from + number) <= totalItemCount) {
from = totalItemCount;
mt = (MyTask) getLastNonConfigurationInstance();
if ( mt == null ){
mt = new MyTask();
mt.execute();
}
mt.link(this);
}
}
}
Re: Урок 91. AsyncTask. Поворот экрана
Добрый день! Как делать все то же самое что показано в этом уроке но на Androide 3.0 и выше. Общеизвестно что на 3.0 и выше методы getLastNonConfigurationInstance()
onRetainNonConfigurationInstance()
, который используется в этом уроке НЕ ВЫЗЫВАЕТСЯ т.к. устарел. Тогда как делать поворот экрана с сохранением AsyncTask на андроиде 3.0 и выше без поддержки этих методов?
onRetainNonConfigurationInstance()
, который используется в этом уроке НЕ ВЫЗЫВАЕТСЯ т.к. устарел. Тогда как делать поворот экрана с сохранением AsyncTask на андроиде 3.0 и выше без поддержки этих методов?
Re: Урок 91. AsyncTask. Поворот экрана
Если метод устарел, это не значит, что он не вызывается. Просто, вместо него рекомендуется использовать свойство retainInstance у фрагментов.zenit писал(а):Добрый день! Как делать все то же самое что показано в этом уроке но на Androide 3.0 и выше. Общеизвестно что на 3.0 и выше методы getLastNonConfigurationInstance()
onRetainNonConfigurationInstance()
, который используется в этом уроке НЕ ВЫЗЫВАЕТСЯ т.к. устарел. Тогда как делать поворот экрана с сохранением AsyncTask на андроиде 3.0 и выше без поддержки этих методов?
А тут еще выше человек написал, что можно использовать AsyncTaskLoader. Я с Loader-ами вообще еще не сталкивался. Кто-нибудь может подтвердить или опровергнуть?
Re: Урок 91. AsyncTask. Поворот экрана
Привет всем.
Я знаю, что сильно туплю, но учу Андроид только третий день.
Попробовала сделать поворот экрана в AsyncTask в своем проекте, но после этого приложение перестало запускаться.
Где я ошибаюсь?
Ошибки в логе
Я знаю, что сильно туплю, но учу Андроид только третий день.
Попробовала сделать поворот экрана в AsyncTask в своем проекте, но после этого приложение перестало запускаться.
Где я ошибаюсь?
Код: Выделить всё
package com.gmail.remielk.gamecli;
import java.io.IOException;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.Menu;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.TextView;
public class MainActivity extends Activity {
ParseMyPageTask mt;
TextView tvInfo;
WebView webview;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mt = (ParseMyPageTask) getLastNonConfigurationInstance();
if (mt == null) {
mt = new ParseMyPageTask();
mt.execute();
}
// передаем в MyTask ссылку на текущее MainActivity
mt.link(this);
tvInfo = (TextView) findViewById(R.id.textView1);
webview = (WebView) findViewById(R.id.webView1);
new ParseMyPageTask()
.execute("http://mysite.com/");
webview.setWebViewClient(new ForumWebViewClient());
}
////////////////////////////
public Object onRetainNonConfigurationInstance() {
// удаляем из MyTask ссылку на старое MainActivity
mt.unLink();
return mt;
}
////////////////////////////
class ParseMyPageTask extends AsyncTask<String, Void, String> {
MainActivity activity;
// получаем ссылку на MainActivity
void link(MainActivity act) {
activity = act;
}
// обнуляем ссылку
void unLink() {
activity = null;
}
@Override
protected String doInBackground(String... params) {
Document doc = null;
String htmltext = "";
try {
doc = Jsoup.connect(params[0]).get();
Element warning = doc.select("body").first();
htmltext = warning.html();
} catch (IOException e) {
e.printStackTrace();
}
return htmltext;
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
webview.loadDataWithBaseURL(null, "<head><link rel=\"stylesheet\" type=\"text/css\" href=\"file:///android_asset/styles/black.css\"></head><body>" + result + "</body>", "text/html", "UTF-8", null);
}
}
////////////////////////////////////
private class ForumWebViewClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
new ParseMyPageTask()
.execute("https://mysite.com/" + url);
return true;
}
}
/////////////////////////////////////////
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if ((keyCode == KeyEvent.KEYCODE_BACK) && webview.canGoBack()) {
webview.goBack();
return true;
}
return super.onKeyDown(keyCode, event);
}
///////////////////////////////////////////
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
Код: Выделить всё
07-26 20:22:21.563: E/AndroidRuntime(1797): FATAL EXCEPTION: AsyncTask #2
07-26 20:22:21.563: E/AndroidRuntime(1797): java.lang.RuntimeException: An error occured while executing doInBackground()
07-26 20:22:21.563: E/AndroidRuntime(1797): at android.os.AsyncTask$3.done(AsyncTask.java:299)
07-26 20:22:21.563: E/AndroidRuntime(1797): at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
07-26 20:22:21.563: E/AndroidRuntime(1797): at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
07-26 20:22:21.563: E/AndroidRuntime(1797): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
07-26 20:22:21.563: E/AndroidRuntime(1797): at java.util.concurrent.FutureTask.run(FutureTask.java:137)
07-26 20:22:21.563: E/AndroidRuntime(1797): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
07-26 20:22:21.563: E/AndroidRuntime(1797): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
07-26 20:22:21.563: E/AndroidRuntime(1797): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
07-26 20:22:21.563: E/AndroidRuntime(1797): at java.lang.Thread.run(Thread.java:856)
07-26 20:22:21.563: E/AndroidRuntime(1797): Caused by: java.lang.ArrayIndexOutOfBoundsException: length=0; index=0
07-26 20:22:21.563: E/AndroidRuntime(1797): at com.gmail.remielk.gamecli.MainActivity$ParseMyPageTask.doInBackground(MainActivity.java:70)
07-26 20:22:21.563: E/AndroidRuntime(1797): at com.gmail.remielk.gamecli.MainActivity$ParseMyPageTask.doInBackground(MainActivity.java:1)
07-26 20:22:21.563: E/AndroidRuntime(1797): at android.os.AsyncTask$2.call(AsyncTask.java:287)
07-26 20:22:21.563: E/AndroidRuntime(1797): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
07-26 20:22:21.563: E/AndroidRuntime(1797): ... 5 more
Re: Урок 91. AsyncTask. Поворот экрана
Remie
ArrayIndexOutOfBoundsException говорит о том что выход за пределы границы массива/коллекции... происходит это где то в doInBackground()
могу лишь предположить что на этих строках,
так что проверяйте
ArrayIndexOutOfBoundsException говорит о том что выход за пределы границы массива/коллекции... происходит это где то в doInBackground()
могу лишь предположить что на этих строках,
Код: Выделить всё
doc = Jsoup.connect(params[0]).get();
Element warning = doc.select("body").first();
R.id.team
Политика на форуме запрещена
Политика на форуме запрещена
Re: Урок 91. AsyncTask. Поворот экрана
До того, как я встроила код урока, парсинг и вывод страницы проходил без ошибок. Хотя, может я не правильно поняла?rezak90 писал(а):Remie
могу лишь предположить что на этих строках,Код: Выделить всё
doc = Jsoup.connect(params[0]).get(); Element warning = doc.select("body").first();
Еще getLastNonConfigurationInstance() отображается ПЕРЕчеркнутым, так и должно быть?
- Mikhail_dev
- Сообщения: 2386
- Зарегистрирован: 09 янв 2012, 14:45
- Откуда: Самара
Re: Урок 91. AsyncTask. Поворот экрана
Remie, а как у вас дела обстоят с языком Java?
Re: Урок 91. AsyncTask. Поворот экрана
Немного читаю c++, java изучаю в процессе обучения программированию под Андроид.no-- писал(а):Remie, а как у вас дела обстоят с языком Java?
Re: Урок 91. AsyncTask. Поворот экрана
ты в репетиторы набиваешься?no-- писал(а):Remie, а как у вас дела обстоят с языком Java?
R.id.team
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198