Урок 87. AsyncTask. Параметры. Промежуточные результаты
Урок 87. AsyncTask. Параметры. Промежуточные результаты
В этом уроке:
- используем параметры
- выводим промежуточные результаты
Click here to read this article!
- используем параметры
- выводим промежуточные результаты
Click here to read this article!
Последний раз редактировалось damager82 20 май 2017, 20:10, всего редактировалось 5 раз.
Re: Урок 87. AsyncTask. Параметры. Промежуточные результаты
есть вопросик на счёт промежуточных результатов, такая вот проблемка возникла: в AsyncTask'e запускаю SAX-парсер
так вот парсер реализован в отдельном классе, как мне выводить промежуточные результаты? в парсере происходит добавление в данные для адаптера:
З.Ы. пробовал сделать адаптер общедоступным и в классе парсера делать notifyDataSetChanged() но приложуха зависает и всё.
Код: Выделить всё
saxParser.parse(bais, handler, content);
Код: Выделить всё
mypackage.mytest.namespace.RssItemListActivity.items.add(new RssItemFull(title, sdf.format(new Date(getFormattedTime(pubDate))),
description, link, fulltext, enclosure, mypackage.mytest.namespace.RssItemListActivity.sPrefEncoding));
R.id.team
Политика на форуме запрещена
Политика на форуме запрещена
Re: Урок 87. AsyncTask. Параметры. Промежуточные результаты
Здравствуйте. Мне нужно вывести в ProgressDialog прогресс шифрования/дешифрования файла. Никогда раньше не работал с потоками,посоветовали использовать AsyncTask. Но я так и не могу понять. Как мне в doInBackground засунуть метод шифрования и дешифрования. При нажатии на какой либо файл у меня появляется Диалог со списком,при нажатии шифровать(case :1) вызываем метод из класса AES, аналогично для дешифрования(case :2).Как мне связать это с AsyncTask и ProgressDialog?
Ниже идет метод который находится в классе AES, который я и вызываю в первом и во втором пункте switch:
Код: Выделить всё
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle(R.string.app_name);
builder.setIcon(R.drawable.ic_launcher);
builder.setItems(mColors, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int item) {
Intent intent = getIntent();
String key = intent.getStringExtra("fpass"); // encrypt
final AES ae = new AES(key);
switch (item) {
case 0:
// open
String mime = gi.get_mime_by_filename(aDirectory
.getAbsolutePath());
Intent intent1 = new Intent();
intent1.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent1.setAction(android.content.Intent.ACTION_VIEW);
intent1.setDataAndType(Uri.fromFile(new File(aDirectory
.getAbsolutePath())), mime);
try {
startActivity(intent1);
} catch (ActivityNotFoundException e) {
Toast.makeText(getApplicationContext(),
"Couldn't open: unknown file type",
Toast.LENGTH_SHORT).show();
}
break;
case 1:
try {
ae.encrypt( new FileInputStream(aDirectory
.getAbsoluteFile()), new
FileOutputStream(sdPathEN + "/" +
aDirectory.getName())); }
catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
break;
case 2:
try {
ae.decrypt(
new FileInputStream(aDirectory
.getAbsolutePath()),
new FileOutputStream(sdPathDE + "/"
+ aDirectory.getName()));
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
break;
case 3:
// delete
aDirectory.delete();
break;
}
dialog.cancel();
}
});
builder.setCancelable(true);
builder.create();
builder.show();
}
Код: Выделить всё
public void decrypt(InputStream in, OutputStream out) {
try {
// TODO Auto-generated method stub
// Bytes read from in will be decrypted
in = new CipherInputStream(in, dcipher);
// Read in the decrypted bytes and write the cleartext to out
int numRead = 0;
while ((numRead = in.read(buf)) >= 0) {
out.write(buf, 0, numRead);
}
out.close();
} catch (java.io.IOException e) {
e.printStackTrace();
}
}
public void encrypt(InputStream in, OutputStream out) {
try {
// Bytes written to out will be encrypted
out = new CipherOutputStream(out, ecipher);
// Read in the cleartext bytes and write to out to encrypt
int numRead = 0;
while ((numRead = in.read(buf)) >= 0) {
out.write(buf, 0, numRead);
}
out.close();
} catch (java.io.IOException e) {
e.printStackTrace();
}
}
-
- Сообщения: 7
- Зарегистрирован: 28 июн 2013, 11:26
Re: Урок 87. AsyncTask. Параметры. Промежуточные результаты
Подскажите пожалуйста почему в методах onPreExecute и onPostExecute не работает publishProgress.TextView не меняется.
Код: Выделить всё
package com.example.test;
import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.SystemClock;
import android.view.View;
import android.widget.TextView;
public class MainActivity extends Activity {
MyTask mt;
TextView textView;
String [] doInBackgroundArray = { "doInBackground 1", "doInBackground 2","doInBackground 3" };
String [] onPreExecuteArray = {"onPreExecute 1","onPreExecute 2","onPreExecute 2"};
String [] onPostExecuteArray = {"onPostExecute 1","onPostExecute 2","onPostExecute 2"};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
textView = (TextView) findViewById(R.id.textView);
}
public void startAsycnTask(View v) {
mt = new MyTask();
mt.execute();
}
class MyTask extends AsyncTask<Void, String, Void> {
@Override
protected void onPreExecute() {
super.onPreExecute();
for (int i = 0; i < onPreExecuteArray.length; i++) {
publishProgress(onPreExecuteArray[i]);
//textView.setText(onPreExecuteArray[i]);
SystemClock.sleep(1000);
}
}
@Override
protected Void doInBackground(Void... params) {
for (int i = 0; i < doInBackgroundArray.length; i++) {
publishProgress(doInBackgroundArray[i]);
SystemClock.sleep(500);
}
return null;
}
@Override
protected void onProgressUpdate(String... values) {
super.onProgressUpdate(values);
textView.setText(values[0]);
}
@Override
protected void onPostExecute(Void result) {
super.onPostExecute(result);
for (int i = 0; i < onPostExecuteArray.length; i++) {
publishProgress(onPostExecuteArray[i]);
//textView.setText(onPostExecuteArray[i]);
SystemClock.sleep(1000);
}
}
}
}
Последний раз редактировалось Romillionaire 07 авг 2013, 17:31, всего редактировалось 1 раз.
- Mikhail_dev
- Сообщения: 2386
- Зарегистрирован: 09 янв 2012, 14:45
- Откуда: Самара
Re: Урок 87. AsyncTask. Параметры. Промежуточные результаты
Поместите исходники в необходимые теги. Читать так код нет никакого желания.
Re: Урок 87. AsyncTask. Параметры. Промежуточные результаты
Спасибо за уроки.
Re: Урок 87. AsyncTask. Параметры. Промежуточные результаты
Замучился с конструкцией. Может справку не понял.
Можно передать в поток несколько входных параметров? Одного мало.
Если да, то как? Имею: DatabaseConnector + ListView и т.д
Или можно объединить их каким-то образом в одну запись и передать одним параметром?
т.е все упирается в public final AsyncTask<Params, Progress, Result> execute(Params... params)
Можно передать в поток несколько входных параметров? Одного мало.
Если да, то как? Имею: DatabaseConnector + ListView и т.д
Или можно объединить их каким-то образом в одну запись и передать одним параметром?
т.е все упирается в public final AsyncTask<Params, Progress, Result> execute(Params... params)
Re: Урок 87. AsyncTask. Параметры. Промежуточные результаты
Может через Parсel, уроки 68-69.Nialon писал(а):Замучился с конструкцией. Может справку не понял.
Можно передать в поток несколько входных параметров? Одного мало.
Если да, то как? Имею: DatabaseConnector + ListView и т.д
Или можно объединить их каким-то образом в одну запись и передать одним параметром?
т.е все упирается в public final AsyncTask<Params, Progress, Result> execute(Params... params)
Когда выкладываете код на форум - код оформляйте. Редактор - поищите слова Geshi Syntax -Java. (или xml)
Свои сообщения можно редактировать - кнопка edit.
Свои сообщения можно редактировать - кнопка edit.
Re: Урок 87. AsyncTask. Параметры. Промежуточные результаты
Гадство, класс как параметр поток не принимает. И еще он есть лишь doInBackground ..
Пойду смотреть Парселябрию. Спасибо. Насчет "I,C" - я их потом убрал для проверки ..
Пойду смотреть Парселябрию. Спасибо. Насчет "I,C" - я их потом убрал для проверки ..
- Вложения
-
- asth.png (22.84 КБ) 19705 просмотров
Re: Урок 87. AsyncTask. Параметры. Промежуточные результаты
Добрый день, подскажите пожалуйста.
Есть программка с реализацией отправки на фтп, делал через сервис.
Однако спустя какое-то время, когда экран темнеет и уходит в спячку, передача перестает проходить, проверяю через FileZilla.
Что посоветуете?Как бороться. Чтобы даже при спячке , сервис отрабатывал как нужно?
Спасибо.
Есть программка с реализацией отправки на фтп, делал через сервис.
Однако спустя какое-то время, когда экран темнеет и уходит в спячку, передача перестает проходить, проверяю через FileZilla.
Что посоветуете?Как бороться. Чтобы даже при спячке , сервис отрабатывал как нужно?
Спасибо.
- KamiSempai
- Сообщения: 1339
- Зарегистрирован: 17 фев 2012, 21:23
- Откуда: Мордор
Re: Урок 87. AsyncTask. Параметры. Промежуточные результаты
Используйте PowerManager.WakeLock.
Как им пользоваться полно примеров в интернете.
Суть проста, перед началом запрашивается разрешение на предотвращение ухода в спящий режим методом acquire().
После выполнения нужных действий ОБЯЗАТЕЛЬНО нужно проинформировать о том, что в спящий режим можно уходить. Делается это через метод release().
Как им пользоваться полно примеров в интернете.
Суть проста, перед началом запрашивается разрешение на предотвращение ухода в спящий режим методом acquire().
После выполнения нужных действий ОБЯЗАТЕЛЬНО нужно проинформировать о том, что в спящий режим можно уходить. Делается это через метод release().
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.
Хватит таскать макулатуру на тренировку! Используй T Note.
Re: Урок 87. AsyncTask. Параметры. Промежуточные результаты
Спасибо. А вот других вариантов нет? Ведь сервис должен какбы работать в фоне ? даже если активити не активити?
Или я чего не понимаю.
Или я чего не понимаю.
Re: Урок 87. AsyncTask. Параметры. Промежуточные результаты
Меня вот что интересует, моменты со всякими notification, которые подают звуки , когда экран выключен. Они же как-то просыпаются? Возможно ли реализовать на подобной основе выгрузку?
Кто подскажет, в каком направлении курить?
Спасибо.
Кто подскажет, в каком направлении курить?
Спасибо.
- KamiSempai
- Сообщения: 1339
- Зарегистрирован: 17 фев 2012, 21:23
- Откуда: Мордор
Re: Урок 87. AsyncTask. Параметры. Промежуточные результаты
Чем этот не угодил? Используйте флаг PARTIAL_WAKE_LOCK тогда CPU будет работать даже при выключенном экране.Savotii писал(а):Спасибо. А вот других вариантов нет?
Кстати, если верить документации, это единственный вариант кода CPU не отправляется в спячку при нажатии кнопки Power.
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.
Хватит таскать макулатуру на тренировку! Используй T Note.
Re: Урок 87. AsyncTask. Параметры. Промежуточные результаты
Подскажите, пожалуйста, как правильно сделать такое
При таком коде ничего не происходит
Код: Выделить всё
class MyTask extends AsyncTask<Void, Void, Void> {
@Override
protected void onPreExecute() {
super.onPreExecute();
dialog.show();
}
@Override
protected Void doInBackground(Void... params) {
StringBuffer sb = new StringBuffer();
BufferedReader br = null;
try {
br = new BufferedReader(new InputStreamReader(getAssets().open("example.txt")));
String temp;
while ((temp = br.readLine()) != null)
sb.append(temp);
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
String myjsonstring = sb.toString();
try {
JSONObject jsonObjMain = new JSONObject(myjsonstring);
JSONArray jsonArray = jsonObjMain.getJSONArray("results");
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject jsonObj = jsonArray.getJSONObject(i);
String name = jsonObj.getString("adress");
JSONObject c = jsonArray.getJSONObject(i);
JSONObject phone = c.getJSONObject("location");
String lat = phone.getString("latitude");
String lon = phone.getString("longitude");
dLat=Double.parseDouble(lat);
dLon=Double.parseDouble(lon);
}
} catch (JSONException e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(Void result) {
super.onPostExecute(result);
myMap.addMarker(new MarkerOptions().position(new LatLng(dLat, dLon)).title(name));
dialog.dismiss();
}
}
- KamiSempai
- Сообщения: 1339
- Зарегистрирован: 17 фев 2012, 21:23
- Откуда: Мордор
Re: Урок 87. AsyncTask. Параметры. Промежуточные результаты
Сложно сказать. Вы показали не весь код. Но я сейчас уже могу сделать замечание. Координаты парсятся в цикле, значит их должно быть несколько, а вы используете только последние данные, которые остаются после прохождения всех строк.
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.
Хватит таскать макулатуру на тренировку! Используй T Note.
Re: Урок 87. AsyncTask. Параметры. Промежуточные результаты
Выше код создания активити, меню и карты myMapKamiSempai писал(а):Вы показали не весь код
Как это несколько? 2 координаты, широта и долгота, и плюс там идёт одна строкаKamiSempai писал(а): Координаты парсятся в цикле, значит их должно быть несколько
Re: Урок 87. AsyncTask. Параметры. Промежуточные результаты
Спасибо , как-нибудь , когда приведу основной код в состояние более - менее качественно скомпанованного, попробую,KamiSempai писал(а):Чем этот не угодил? Используйте флаг PARTIAL_WAKE_LOCK тогда CPU будет работать даже при выключенном экране.Savotii писал(а):Спасибо. А вот других вариантов нет?
Кстати, если верить документации, это единственный вариант кода CPU не отправляется в спячку при нажатии кнопки Power.
на текущий момент ограничился startForeground(), вроде бы работает, запущу на ночь, если все гуд ,оставлю в текущей реализации.
Если нет, будем шаманить.
Спасибо.
Re: Урок 87. AsyncTask. Параметры. Промежуточные результаты
При варианте с notification и повышение приоритета сервиса путем startForeground() , все работает.
Re: Урок 87. AsyncTask. Параметры. Промежуточные результаты
Настраивать вью можно только из мейн треда.
Семь раз отмерь - поставь студию.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.