SQLite, Preferences, файлы, SD, Content Provider, XML, JSON
-
sanu0074
- Сообщения: 80
- Зарегистрирован: 30 июн 2013, 20:42
-
Контактная информация:
Сообщение
sanu0074 » 12 июл 2013, 11:39
Приложение выполняется без ошибок, но результат не вставляется в TextView
Вызов XML-загрузчика:
Код: Выделить всё
AsyncDownloader downloader = new AsyncDownloader();
downloader.execute();
Функция которая записывает результат, находится в классе Main:
Код: Выделить всё
public void rec(String data)
{
TextView tv = (TextView) findViewById(R.id.textView1);
tv.setText(data);
}
Парсер XML:
Код: Выделить всё
class AsyncDownloader extends AsyncTask<Object, String, Integer>{
@Override
protected Integer doInBackground(Object... params) {
XmlPullParser recivedData = null;
try {
recivedData = tryDownloadingXmlData();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
int recordsFound = 0;
try {
recordsFound = tryParsingXmlData(recivedData);
} catch (XmlPullParserException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return recordsFound;
}
private XmlPullParser tryDownloadingXmlData() throws IOException {
try{
URL xmlUrl = new URL("http://home-android.ru/android/main");
XmlPullParser recivedData = XmlPullParserFactory.newInstance().newPullParser();
recivedData.setInput(xmlUrl.openStream(),null);
return recivedData;
}
catch(XmlPullParserException e){ }
catch(IOException e) { }
return null;
}
private int tryParsingXmlData(XmlPullParser recivedData) throws XmlPullParserException, IOException {
if(recivedData != null)
{
processRecivedData(recivedData);
}
return 0;
}
private void processRecivedData(XmlPullParser xmlData) throws XmlPullParserException, IOException {
int eventType = -1;
int recordsFound = 0;
String lnk="";
String data="";
while(eventType!=XmlResourceParser.END_DOCUMENT)
{
String tagName=xmlData.getName();
switch(eventType)
{
case XmlResourceParser.START_TAG:
if(tagName.equals("lnk"))
{
data+=xmlData.getText();
}
break;
case XmlResourceParser.TEXT:
data+=xmlData.getText();
break;
case XmlResourceParser.END_TAG:
if(tagName.equals("lnk"))
{
recordsFound++;
publishProgress(lnk,data);
}
break;
}
eventType=xmlData.next();
if(recordsFound==0){
publishProgress();
}
}
}
protected void onProgessUpdate(String... values){
if(values.length==2)
{
String data = values[0];
String lnk = values[1];
Main main = new Main();
main.rec(data+lnk);
}
super.onProgressUpdate(values);
}
}
-
anber
- Сообщения: 584
- Зарегистрирован: 10 июн 2013, 15:05
- Откуда: UA
Сообщение
anber » 12 июл 2013, 11:49
А почему в названии метода onProgressUpdate пропущена буква r ?
PS. Если это решит проблему тогда поговорим подробнее про аннотацию @Override
Личные сообщения с просьбой ответить на форуме или написать программу я просто удаляю, если я в хорошем настроении. Если в плохом добавляю автора в черный список. По любым другим вопросам feel free to write to me.
-
sanu0074
- Сообщения: 80
- Зарегистрирован: 30 июн 2013, 20:42
-
Контактная информация:
Сообщение
sanu0074 » 12 июл 2013, 11:58
anber писал(а): Если это решит проблему тогда поговорим подробнее про аннотацию @Override
проблеме не решилась..
-
anber
- Сообщения: 584
- Зарегистрирован: 10 июн 2013, 15:05
- Откуда: UA
Сообщение
anber » 12 июл 2013, 12:06
sanu0074 писал(а):проблеме не решилась..
ок...
Попробуй добавить метод
onPostExecute и вывести в TextView то значение которое в него прийдет.
И да, отладчиком пользоваться умеешь?
Личные сообщения с просьбой ответить на форуме или написать программу я просто удаляю, если я в хорошем настроении. Если в плохом добавляю автора в черный список. По любым другим вопросам feel free to write to me.
-
sanu0074
- Сообщения: 80
- Зарегистрирован: 30 июн 2013, 20:42
-
Контактная информация:
Сообщение
sanu0074 » 12 июл 2013, 12:43
anber писал(а):sanu0074 писал(а):проблеме не решилась..
ок...
Попробуй добавить метод
onPostExecute и вывести в TextView
результат тоже...(( ничего не выводит!
могу скинуть полностью проект, потестиш?
-
anber
- Сообщения: 584
- Зарегистрирован: 10 июн 2013, 15:05
- Откуда: UA
Сообщение
anber » 12 июл 2013, 12:51
sanu0074 писал(а):anber писал(а):sanu0074 писал(а):проблеме не решилась..
ок...
Попробуй добавить метод
onPostExecute и вывести в TextView
результат тоже...(( ничего не выводит!
могу скинуть полностью проект, потестиш?
кидай, я сегодня добрый...
Личные сообщения с просьбой ответить на форуме или написать программу я просто удаляю, если я в хорошем настроении. Если в плохом добавляю автора в черный список. По любым другим вопросам feel free to write to me.
-
sanu0074
- Сообщения: 80
- Зарегистрирован: 30 июн 2013, 20:42
-
Контактная информация:
Сообщение
sanu0074 » 12 июл 2013, 12:53
anber писал(а):
кидай, я сегодня добрый...

спасибо)))
-
Вложения
-
- test.rar
- (1.06 МБ) 283 скачивания
-
anber
- Сообщения: 584
- Зарегистрирован: 10 июн 2013, 15:05
- Откуда: UA
Сообщение
anber » 12 июл 2013, 13:14
sanu0074 писал(а):anber писал(а):
кидай, я сегодня добрый...

спасибо)))
Есть ммм...несколько вопросов к твоему коду:
1) ТЫ ЧИТАЛ МОЕ ПЕРВОЕ СООБЩЕНИЕ В ЭТОЙ ТЕМЕ, А ИМЕННО:
А почему в названии метода onProgressUpdate пропущена буква r ?
2) В методе
onProgressUpdate что это?
Код: Выделить всё
Main main = new Main();
main.rec(data+lnk);
Личные сообщения с просьбой ответить на форуме или написать программу я просто удаляю, если я в хорошем настроении. Если в плохом добавляю автора в черный список. По любым другим вопросам feel free to write to me.
-
sanu0074
- Сообщения: 80
- Зарегистрирован: 30 июн 2013, 20:42
-
Контактная информация:
Сообщение
sanu0074 » 12 июл 2013, 13:20
anber писал(а):
А почему в названии метода onProgressUpdate пропущена буква r?
Где пропущена? вроде ж без ошибок....
Код: Выделить всё
2) В методе [b]onProgressUpdate[/b] что это?
Main main = new Main();
main.rec(data+lnk);
Здесь создается объект класса Main и через него вызывается функция записи ответа от сервера в TextView
-
anber
- Сообщения: 584
- Зарегистрирован: 10 июн 2013, 15:05
- Откуда: UA
Сообщение
anber » 12 июл 2013, 13:28
1) я хочу сыграть с тобой в одну игру...называется найди одно отличие:
onProgessUpdate
onProgressUpdate
2) проблема в том что объект класса Main уже существует - его создала система, и в нем есть TextView. В том объекте класса Main который ты создаешь нет никакого TextView и при выполнении этого кода приложение упадет с ошибкой. Короче говоря нужно использовать уже существующий обьект Main
Личные сообщения с просьбой ответить на форуме или написать программу я просто удаляю, если я в хорошем настроении. Если в плохом добавляю автора в черный список. По любым другим вопросам feel free to write to me.
-
anber
- Сообщения: 584
- Зарегистрирован: 10 июн 2013, 15:05
- Откуда: UA
Сообщение
anber » 12 июл 2013, 13:39
Как решить эту проблему?
Смотри - я немного подправил твой файл:
Код: Выделить всё
package com.t.test;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import org.xmlpull.v1.XmlPullParserFactory;
import android.os.AsyncTask;
import android.os.Bundle;
import android.app.Activity;
import android.content.res.XmlResourceParser;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.util.Log;
import android.widget.ImageView;
import android.widget.TextView;
public class Main extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ImageView iv = (ImageView) findViewById(R.id.imageView1);
new DownloadImageTask(iv).execute("http://home-android.ru/content/games/1090/1372176761712958M.png");
AsyncDownloader downloader = new AsyncDownloader();
downloader.execute();
}
public void rec(String data)
{
TextView tv = (TextView) findViewById(R.id.textView1);
tv.setText(data);
}
class AsyncDownloader extends AsyncTask<Object, String, Integer>{
@Override
protected Integer doInBackground(Object... params) {
XmlPullParser recivedData = null;
try {
recivedData = tryDownloadingXmlData();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
int recordsFound = 0;
try {
recordsFound = tryParsingXmlData(recivedData);
} catch (XmlPullParserException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return recordsFound;
}
private XmlPullParser tryDownloadingXmlData() throws IOException {
try{
URL xmlUrl = new URL("http://home-android.ru/android/main");
XmlPullParser recivedData = XmlPullParserFactory.newInstance().newPullParser();
recivedData.setInput(xmlUrl.openStream(),null);
return recivedData;
}
catch(XmlPullParserException e){ }
catch(IOException e) { }
return null;
}
private int tryParsingXmlData(XmlPullParser recivedData) throws XmlPullParserException, IOException {
if(recivedData != null)
{
processRecivedData(recivedData);
}
return 0;
}
private void processRecivedData(XmlPullParser xmlData) throws XmlPullParserException, IOException {
int eventType = -1;
int recordsFound = 0;
String lnk="";
String data="";
while(eventType!=XmlResourceParser.END_DOCUMENT)
{
String tagName=xmlData.getName();
switch(eventType)
{
case XmlResourceParser.START_TAG:
if(tagName.equals("lnk"))
{
data+=xmlData.getText();
}
break;
case XmlResourceParser.TEXT:
data+=xmlData.getText();
break;
case XmlResourceParser.END_TAG:
if(tagName.equals("lnk"))
{
recordsFound++;
publishProgress(lnk,data);
}
break;
}
eventType=xmlData.next();
if(recordsFound==0){
publishProgress();
}
}
}
/*
@Override
public void onPostExecute(String... values)
{
String data = values[0];
String lnk = values[1];
Main main = new Main();
main.rec(data+lnk);
}
*/
@Override
protected void onPostExecute(Integer result) {
super.onPostExecute(result);
// твой код
}
@Override
protected void onProgressUpdate(String... values){
if(values.length==2)
{
String data = values[0];
String lnk = values[1];
// Main main = new Main();
Main.this.rec(data+lnk);
}
super.onProgressUpdate(values);
}
}
class DownloadImageTask extends AsyncTask<String, Void, Bitmap> {
ImageView bmImage;
DownloadImageTask(ImageView bmImage) {
this.bmImage = bmImage;
}
protected Bitmap doInBackground(String... urls) {
String urldisplay = urls[0];
Bitmap mIcon11 = null;
try {
InputStream in = new java.net.URL(urldisplay).openStream();
mIcon11 = BitmapFactory.decodeStream(in);
} catch (Exception e) {
Log.e("Error", e.getMessage());
e.printStackTrace();
}
return mIcon11;
}
protected void onPostExecute(Bitmap result) {
bmImage.setImageBitmap(result);
}
}
}
Что я изменил?
1) Написал методы
onPostExecute и
onProgressUpdate без грамматических ошибок, и так чтобы параметры которые в них приходят соответствовали тем которые ты указал при создании
AsyncTask<Object, String, Integer> - последнее значение
Integer должно соответствовать значению которое возвращает
doInBackground и приходит в
onPostExecute
2) внес классы
AsyncDownloader и
DownloadImageTask внутрь класса
Main. Теперь они могут получить доступ public к методам
существующего объекта класса Main, например:
Main.this.rec(data+lnk);
Личные сообщения с просьбой ответить на форуме или написать программу я просто удаляю, если я в хорошем настроении. Если в плохом добавляю автора в черный список. По любым другим вопросам feel free to write to me.
-
sanu0074
- Сообщения: 80
- Зарегистрирован: 30 июн 2013, 20:42
-
Контактная информация:
Сообщение
sanu0074 » 12 июл 2013, 13:44
anber писал(а):1) я хочу сыграть с тобой в одну игру...
Работает, спасибо большое)))
-
anber
- Сообщения: 584
- Зарегистрирован: 10 июн 2013, 15:05
- Откуда: UA
Сообщение
anber » 12 июл 2013, 13:48
посмотри, я там еще выложил пример кода
Личные сообщения с просьбой ответить на форуме или написать программу я просто удаляю, если я в хорошем настроении. Если в плохом добавляю автора в черный список. По любым другим вопросам feel free to write to me.
-
sanu0074
- Сообщения: 80
- Зарегистрирован: 30 июн 2013, 20:42
-
Контактная информация:
Сообщение
sanu0074 » 12 июл 2013, 13:53
anber писал(а):посмотри, я там еще выложил пример кода
уже юзаю, спасибо)