Форум программистов, компьютерный форум CyberForum.ru

Программирование Android

Войти
Регистрация
Восстановить пароль
 
Nasdomlan
1 / 1 / 1
Регистрация: 21.10.2013
Сообщений: 110
#1

Изображение в RSS ленте - Программирование Android

26.04.2015, 20:08. Просмотров 641. Ответов 13
Метки нет (Все метки)

Подскажите пожалуйста,правильно ли я получаю переменную <img>site.ru/img.png</img> из моей RSS ленты?
NewParser.java
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
package app.kray.anddev;
 
import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import android.sax.Element;
import android.sax.EndElementListener;
import android.sax.EndTextElementListener;
import android.sax.RootElement;
import android.util.Xml;
 
public class NewParser {
 
    protected InputStream getInputStream() {
        URL feedUrl = null;
        try {
            feedUrl = new URL("http://urbanside.ru/rss.xml");
        } catch (MalformedURLException e1) {
            e1.printStackTrace();
            feedUrl = null;
        }
        try {
            return feedUrl.openConnection().getInputStream();
        } catch (IOException e) {
            e.printStackTrace();
            return null;
        }
    }
 
    public ArrayList<PostItem> parse() {
        final PostItem currentPost = new PostItem();
        final ArrayList<PostItem> messages = new ArrayList<PostItem>();
        RootElement root = new RootElement("rss");
        Element channel = root.getChild("channel");
        Element item = channel.getChild("item");
        item.setEndElementListener(new EndElementListener() {
            @Override
            public void end() {
                messages.add(currentPost.copy());
            }
        });
        item.getChild("title").setEndTextElementListener(
                new EndTextElementListener() {
                    @Override
                    public void end(String body) {
                        currentPost.title = body;
                    }
                });
        item.getChild("link").setEndTextElementListener(
                new EndTextElementListener() {
                    @Override
                    public void end(String body) {
                        currentPost.link = body;
                    }
                });
        item.getChild("description").setEndTextElementListener(
                new EndTextElementListener() {
                    @Override
                    public void end(String body) {
                        currentPost.description = body;
                    }
                });
        item.getChild("pubDate").setEndTextElementListener(
                new EndTextElementListener() {
                    @Override
                    public void end(String body) {
                        currentPost.setDate(body);
                    }
                });
        item.getChild("img").setEndTextElementListener(
                new EndTextElementListener() {
                    @Override
                    public void end(String body) {
                        currentPost.setDate(body);
                    }
                });
        try {
            Xml.parse(this.getInputStream(), Xml.Encoding.UTF_8,
                    root.getContentHandler());
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
        return messages;
    }
}

Кусочек AnddevActivity.java
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
package app.kray.anddev;
 
import java.util.ArrayList;
 
import android.app.Activity;
import android.app.AlertDialog;
import android.app.ListActivity;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.ListView;
//import android.widget.Toast;
 
public class AnddevActivity extends ListActivity {  
 
    public final static String PREFERENCES_NAME = "preferences";
    public final static String PREFERENCES_THEME_ID = "theme";
    public final static int DEFAULT_THEME = R.style.DefaultTheme;
 
    private ArrayList<PostItem> messages;
    private PostAdapter adapter;
    private boolean themeChanged = false;
 
    @SuppressWarnings("unchecked")
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setTheme(this);
        setContentView(R.layout.main);
        if (!themeChanged) {
            final Object data = getLastNonConfigurationInstance();
            if (data == null) {
                new GetParserResult().execute();
            } else {
                messages = (ArrayList<PostItem>) data;
                adapter = new PostAdapter(AnddevActivity.this,
                        R.layout.post_entry, messages);
                setListAdapter(adapter);
            }
        } else
            themeChanged = false;
    }
 
    @Override
    protected void onListItemClick(ListView l, View v, int position, long id) {
        super.onListItemClick(l, v, position, id);
        Intent postActivity = new Intent(this, PostActivity.class);
        Bundle store = new Bundle();
        store.putString("title", messages.get(position).title);
        store.putString("description", messages.get(position).description);
        store.putString("date", messages.get(position).date);
        store.putString("link", messages.get(position).link);
        store.putString("img", messages.get(position).link);
        postActivity.putExtras(store);
        startActivity(postActivity);
    }

PostItem.java
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
package app.kray.anddev;
 
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Locale;
 
public class PostItem {
    static SimpleDateFormat FORMATTER = new SimpleDateFormat(
            "E, dd MMM yyyy HH:mm:ss Z", Locale.US);
    static SimpleDateFormat OUT_FORMATTER = new SimpleDateFormat(
            "dd MMMM");
    public String title;
    public String link;
    public String description;
    public String date;
    public String img;
    
    public void setDate(String date) {
        try {
            this.date = OUT_FORMATTER.format(FORMATTER.parse(date
                    .trim()));
        } catch (ParseException e) {
            this.date = null;
        }
    }
 
    public PostItem copy() {
        PostItem copy = new PostItem();
        copy.title = title;
        copy.link = link;
        copy.description = description;
        copy.date = date;
        copy.img = img;
        return copy;
    }
 
}
И на всякий случай
PostAdapter.java
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
package app.kray.anddev;
 
import java.util.ArrayList;
import android.app.Activity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.TextView;
 
public class PostAdapter extends ArrayAdapter<PostItem> {
 
    public ArrayList<PostItem> messages;
    public LayoutInflater inflater;
 
    public PostAdapter(Activity context, int resource,
            ArrayList<PostItem> objects) {
        super(context, resource, objects);
        messages = objects;
        inflater = LayoutInflater.from(context);
    }
 
    static class ViewHolder {
        public TextView titleView;
        public TextView pubDateView;
    }
 
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder holder;
        if (convertView == null) {
            convertView = inflater.inflate(R.layout.post_entry, null, true);
            holder = new ViewHolder();
            holder.titleView = (TextView) convertView
                    .findViewById(R.id.post_title);
            holder.pubDateView = (TextView) convertView
                    .findViewById(R.id.post_pubDate);
            convertView.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }
        holder.titleView.setText(messages.get(position).title);
        holder.pubDateView.setText(messages.get(position).date);
        return convertView;
    }
 
}
И как теперь это изображение,если правильно получаю ввести сюда?
PostActivity.java
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
package app.kray.anddev;
 
import android.app.Activity;
import android.os.Bundle;
import android.text.Html;
import android.text.method.LinkMovementMethod;
import android.widget.TextView;
 
public class PostActivity extends Activity {
 
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        AnddevActivity.setTheme(this);
        setContentView(R.layout.post);
        TextView title = (TextView) findViewById(R.id.title);
        TextView description = (TextView) findViewById(R.id.description);
        TextView date = (TextView) findViewById(R.id.date);
        Bundle store = getIntent().getExtras();
        title.setText(store.getString("title").replace("[...]", ""));
        String tDescription = store.getString("description").replace("[...]", "");
        description.setMovementMethod(LinkMovementMethod.getInstance());
        description.setText(Html.fromHtml(tDescription));
        date.setText(store.getString("date"));
    }
 
}
Я бы хотел его либо в ImgView либо в WebView пихать,как лучше?
А это XML от места,где должно быть изображение.
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    style="?ActivityPost" >
    <TextView 
        android:id="@+id/title" 
        style="?PostTitle"/>
    <TextView 
        android:layout_below="@id/title"
        android:id="@+id/description" 
        style="?PostDescription" />
 
    <TextView 
        android:id="@+id/date" 
        style="?PostDate" />
 
</RelativeLayout>
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.04.2015, 20:08
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Изображение в RSS ленте (Программирование Android):

RSS клиент - Программирование Android
Привет все программистам. Недавно начал осваивать Eclipse.разрабатываю RSS клиент под андроид. У меня маленькая загвоздка. Что и как...

Listener и RSS - Программирование Android
Здравствуйте! Начинаю изучать программирование на java под android. В качестве практики мой выбор пал на написание RSS ридера, который бы...

UI rss читалки - Программирование Android
Доброго времени суток. Хочу сделать читалку rss для определённого сайта. Самою большую трудность как не странно я встретил в самом...

ImageView in ArrayList RSS? - Программирование Android
Проблема такова: есть RSS читалка в активити (ListView) public class TwoActivity extends ListActivity { List headlines; ...

RSS в Android studio - Программирование Android
В Eclipse src/rembo.network.rss/RssItem.java. А в Android Studio? Нету папок для RSS, хочу с интернета получать контент. Надеюсь, поняли....

Создание RSS реадера - Программирование Android
Я хочу прикрутить RSS ленту к pull to refresh Тоесть не выводить на екран всю ленту, а частями при перетягивании екрана не могу...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Nasdomlan
1 / 1 / 1
Регистрация: 21.10.2013
Сообщений: 110
26.04.2015, 21:39  [ТС] #2
Изображение в RSS ленте
Сейчас такое выдает...На место синего квадрата пытаюсь прикрутить картинку из новости.
Nasdomlan
1 / 1 / 1
Регистрация: 21.10.2013
Сообщений: 110
26.04.2015, 22:46  [ТС] #3
Перешел на Пикассо пытаюсь так вывести
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
package app.kray.anddev;
 
import com.squareup.picasso.Picasso;
import com.squareup.picasso.Target;
 
import android.app.Activity;
import android.os.Bundle;
import android.text.Html;
import android.text.method.LinkMovementMethod;
import android.widget.TextView;
 
public class PostActivity extends Activity {
 
 
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        AnddevActivity.setTheme(this);
        setContentView(R.layout.post);
        Target img = (Target) findViewById(R.id.img);
        TextView title = (TextView) findViewById(R.id.title);
        TextView description = (TextView) findViewById(R.id.description);
        TextView date = (TextView) findViewById(R.id.date);
        Bundle store = getIntent().getExtras();
        title.setText(store.getString("title").replace("[...]", ""));
        String tDescription = store.getString("description").replace("[...]", "");
        description.setMovementMethod(LinkMovementMethod.getInstance());
        description.setText(Html.fromHtml(tDescription));
        date.setText(store.getString("date"));
        Picasso.with(getBaseContext()).load("img").into(img);
    }
 
}
Ошибка такая
Код
04-26 22:42:53.716: E/AndroidRuntime(12126): FATAL EXCEPTION: main
04-26 22:42:53.716: E/AndroidRuntime(12126): Process: app.kray.anddev, PID: 12126
04-26 22:42:53.716: E/AndroidRuntime(12126): java.lang.RuntimeException: Unable to start activity ComponentInfo{app.kray.anddev/app.kray.anddev.PostActivity}: java.lang.ClassCastException: android.widget.ImageView cannot be cast to com.squareup.picasso.Target
04-26 22:42:53.716: E/AndroidRuntime(12126): 	at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2345)
04-26 22:42:53.716: E/AndroidRuntime(12126): 	at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2405)
04-26 22:42:53.716: E/AndroidRuntime(12126): 	at android.app.ActivityThread.access$800(ActivityThread.java:149)
04-26 22:42:53.716: E/AndroidRuntime(12126): 	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1324)
04-26 22:42:53.716: E/AndroidRuntime(12126): 	at android.os.Handler.dispatchMessage(Handler.java:102)
04-26 22:42:53.716: E/AndroidRuntime(12126): 	at android.os.Looper.loop(Looper.java:211)
04-26 22:42:53.716: E/AndroidRuntime(12126): 	at android.app.ActivityThread.main(ActivityThread.java:5315)
04-26 22:42:53.716: E/AndroidRuntime(12126): 	at java.lang.reflect.Method.invoke(Native Method)
04-26 22:42:53.716: E/AndroidRuntime(12126): 	at java.lang.reflect.Method.invoke(Method.java:372)
04-26 22:42:53.716: E/AndroidRuntime(12126): 	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:941)
04-26 22:42:53.716: E/AndroidRuntime(12126): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:736)
04-26 22:42:53.716: E/AndroidRuntime(12126): Caused by: java.lang.ClassCastException: android.widget.ImageView cannot be cast to com.squareup.picasso.Target
04-26 22:42:53.716: E/AndroidRuntime(12126): 	at app.kray.anddev.PostActivity.onCreate(PostActivity.java:20)
04-26 22:42:53.716: E/AndroidRuntime(12126): 	at android.app.Activity.performCreate(Activity.java:5933)
04-26 22:42:53.716: E/AndroidRuntime(12126): 	at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105)
04-26 22:42:53.716: E/AndroidRuntime(12126): 	at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2298)
04-26 22:42:53.716: E/AndroidRuntime(12126): 	... 10 more
Rube
911 / 559 / 88
Регистрация: 13.02.2014
Сообщений: 2,070
27.04.2015, 07:30 #4
R.id.img надо посмотреть лаяут видимо.
Nasdomlan
1 / 1 / 1
Регистрация: 21.10.2013
Сообщений: 110
27.04.2015, 09:13  [ТС] #5
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
    <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    style="?ActivityPost" >
    <TextView 
        android:id="@+id/title" 
        style="?PostTitle"/>
    
    <ImageView
        android:id="@+id/img"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:scaleType="center" 
        android:contentDescription="@string/desc"/>
        
    <TextView 
        android:layout_below="@id/title"
        android:id="@+id/description" 
        style="?PostDescription" />
 
    <TextView 
        android:id="@+id/date" 
        style="?PostDate" />
 
</RelativeLayout>
Вот лэйаут.Ссылку 100% рабочую получаю
Вот так проверил,ее внизу вывело.
Изображение в RSS ленте
Надо что-то тут видимо изменить т.к Eclispse пишет ошибку там где выделил
Picasso.with(getBaseContext()).load(img).into("img");
Вот ошибка
The method load(Uri) in the type Picasso is not applicable for the arguments (ImageView)
androbro
326 / 286 / 60
Регистрация: 17.10.2014
Сообщений: 842
27.04.2015, 09:53 #6
Цитата Сообщение от Nasdomlan Посмотреть сообщение
The method load(Uri) in the type Picasso is not applicable for the arguments (ImageView)
ну написано же - в load кидаем URI а в into View
а у Вас совсем все перепутано
Цитата Сообщение от Nasdomlan Посмотреть сообщение
Picasso.with(getBaseContext()).load(img).into("img");
Добавлено через 15 минут
Nasdomlan, при условии что в вы правильно спарсили тэг img, должно получится как то так:
Java
1
2
        Uri imgUri = Uri.parse(store.getString("img").replace("[...]", ""));
        Picasso.with(getBaseContext()).load(imgUri).into(img);
так же не работал с Picasso, не знаю должен ли load быть вынесен в отдельный поток, т.к. работа с сетью в UI получается.
Nasdomlan
1 / 1 / 1
Регистрация: 21.10.2013
Сообщений: 110
27.04.2015, 11:07  [ТС] #7
Странно,но не помогло... А зачем функция replace?
Вот мой xml - http://urbanside.ru/rss.xml
Картинка в теге <img>url</img>
androbro
326 / 286 / 60
Регистрация: 17.10.2014
Сообщений: 842
27.04.2015, 12:29 #8
Цитата Сообщение от Nasdomlan Посмотреть сообщение
Странно,но не помогло... А зачем функция replace?
ну это ваш же код, Вам должно быть быть виднее зачем replace

Добавлено через 3 минуты
Nasdomlan,
Цитата Сообщение от Nasdomlan Посмотреть сообщение
Картинка в теге <img>url</img>
если так то все должно работать...
Java
1
2
Uri imgUri = Uri.parse(store.getString("img"));
Picasso.with(getBaseContext()).load(imgUri).into(img);
Rube
911 / 559 / 88
Регистрация: 13.02.2014
Сообщений: 2,070
27.04.2015, 13:20 #9
Я конечно не пользовал Picasso, но так можно ли:
Java
1
Target img = (Target) findViewById(R.id.img);
XML
1
2
<ImageView
    android:id="@+id/img"
androbro
326 / 286 / 60
Регистрация: 17.10.2014
Сообщений: 842
27.04.2015, 13:44 #10
Rube,
Цитата Сообщение от Rube Посмотреть сообщение
но так можно ли:
в точку ТС конечно намудрил)
Nasdomlan
1 / 1 / 1
Регистрация: 21.10.2013
Сообщений: 110
27.04.2015, 13:54  [ТС] #11
Вот и прошу помощи,чтобы разобраться))
Rube
911 / 559 / 88
Регистрация: 13.02.2014
Сообщений: 2,070
27.04.2015, 14:08 #12
Nasdomlan, замени попробуй
Java
1
2
3
4
ImageView img = (ImageView) findViewById(R.id.img); 
Picasso.with(this)
   .load("https://****/рис.jpg")
   .into(img);
Nasdomlan
1 / 1 / 1
Регистрация: 21.10.2013
Сообщений: 110
27.04.2015, 15:58  [ТС] #13
Прогрузил,а как размер сменить?Принудительно?
Но теперь будет лишь проблема отловить URL сам,ибо если я прописываю так
Код
		Picasso.with(this)
		   .load("http://cs624929.vk.me/v624929680/2e071/ViZZqlOIDiQ.jpg")
		   .into(img);
	}
То он показывает,а вот родную картинку...
Ибо так не помогло...
Код
ImageView img = (ImageView) findViewById(R.id.img); 
Picasso.with(this)
   .load("img")
   .into(img);
Добавлено через 16 минут
Код
04-28 15:45:04.239: E/ActivityThread(26904): Failed to find provider info for app.kray.anddev.MetricaContentProvider
04-28 15:45:04.320: E/ActivityThread(26904): Failed to find provider info for app.kray.anddev.YPLContentProvider
И такие ерроры...

Добавлено через 4 минуты
УРА!
Код
		Uri imgUri = Uri.parse(store.getString("img"));
		Picasso.with(getBaseContext()).load(imgUri).into(img);
Помогло)Но как теперь ее сделать не как фон,а в рамке?
И подогнать размер?
Ну и совсем обнаглею,как можно сделать ее как превью по клику увеличение?

Добавлено через 6 минут
Код
private boolean zoomOut =  false;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    final ImageView imageView  = (ImageView)findViewById(R.id.imageView1);
    imageView .setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
              if(zoomOut) {
              Toast.makeText(getApplicationContext(), "NORMAL SIZE!", Toast.LENGTH_LONG).show();
                    imageView.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT));
                    imageView.setAdjustViewBounds(true);
                    zoomOut =false;
                }else{
              Toast.makeText(getApplicationContext(), "FULLSCREEN!", Toast.LENGTH_LONG).show();
                    imageView.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT));
                    imageView.setScaleType(ImageView.ScaleType.FIT_XY);
                    zoomOut = true;
                }
            }                   
    });
}
Как-то так?Только куда это писать?)
Nasdomlan
1 / 1 / 1
Регистрация: 21.10.2013
Сообщений: 110
27.04.2015, 16:01  [ТС] #14
Вот так сейчас
Изображение в RSS ленте
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.04.2015, 16:01
Привет! Вот еще темы с ответами:

RSS и новостное приложение - Программирование Android
Суть:Нужно простое новостное приложние, которое грубо транслирует RSS. Скажите, как это грамотно организовать. Я начинающий и знания пока...

RSS reader by XmlPullParser + Listview - Программирование Android
Написал программу для чтения RSS: https://github.com/PhantomRec/RSS Всё работает, но проблема в том, что показывает 5-7 тем, далее...

Rss reader - parse xml - Программирование Android
http://buxoro.uz/uz/yangiliklar.xml how to parse this xml . . help me please......

Загрузка изображений с RSS ленты - Программирование Android
Есть Reader RSS ленты, который преобразует это все в ListView. Как мне сделать так, чтобы вдобавок еще грузились картинки с этой же ленты?...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
27.04.2015, 16:01
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru