Salve a tutti, volevo parlarvi di un problema strano.
Ho trovato su internet una guida dove spiegava come realizzare un parser per feed rss.
Seguendo la guida, sono riuscito a scriver un parser che mette in una listview i feed rss.
Ho collegato il Galaxy S un Debug mode, mentre al Galaxy Y ho solo mandato l'Apk firmato via bluetooth.
Nel Virtual Device il parser funziona, sul Galaxy S no. Mi Da' un errore come se non ci fosse connessione ad internet, eppure la wifi sul Galaxy S è collegata al router e funziona.
Vi allego il codice Java e il logcat del Galaxy S
layour main
x1<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
2xmlns:tools="http://schemas.android.com/tools"
3android:layout_width="match_parent"
4android:layout_height="match_parent" >
5
6<ListView
7android:id="@+id/listMainView"
8android:layout_width="fill_parent"
9android:layout_height="wrap_content" >
10</ListView>
11
12</RelativeLayout>
Classi utilizzate:
241
2public class RssItem {
3
4private String title;
5
6private String link;
7public String getTitle() {
8return title;
9}
10public void setTitle(String title) {
11this.title = title;
12}
13public String getLink() {
14return link;
15}
16public void setLink(String link) {
17this.link = link;
18}
19
20public String toString() {
21return title;
22}
23}
24
551
2public class RssParseHandler extends DefaultHandler {
3
4private List<RssItem> rssItems;
5
6private RssItem currentItem;
7
8private boolean parsingTitle;
9
10private boolean parsingLink;
11
12public RssParseHandler() {
13rssItems = new ArrayList<RssItem>();
14}
15
16public List<RssItem> getItems() {
17return rssItems;
18}
19
20
21public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
22if ("item".equals(qName)) {
23currentItem = new RssItem();
24} else if ("title".equals(qName)) {
25parsingTitle = true;
26} else if ("link".equals(qName)) {
27parsingLink = true;
28}
29}
30
31
32public void endElement(String uri, String localName, String qName) throws SAXException {
33if ("item".equals(qName)) {
34rssItems.add(currentItem);
35currentItem = null;
36} else if ("title".equals(qName)) {
37parsingTitle = false;
38} else if ("link".equals(qName)) {
39parsingLink = false;
40}
41}
42
43
44public void characters(char[] ch, int start, int length) throws SAXException {
45if (parsingTitle) {
46if (currentItem != null)
47currentItem.setTitle(new String(ch, start, length));
48} else if (parsingLink) {
49if (currentItem != null) {
50currentItem.setLink(new String(ch, start, length));
51parsingLink = false;
52}
53}
54}
55}
151public class RssReader {
2private String rssUrl;
3
4public RssReader(String rssUrl) {
5this.rssUrl = rssUrl;
6}
7
8public List<RssItem> getItems() throws Exception {
9SAXParserFactory factory = SAXParserFactory.newInstance();
10SAXParser saxParser = factory.newSAXParser();
11RssParseHandler handler = new RssParseHandler();
12saxParser.parse(rssUrl, handler);
13return handler.getItems();
14}
15}
151
2public class ListListener implements OnItemClickListener {
3List<RssItem> listItems;
4Activity activity;
5public ListListener(List<RssItem> aListItems, Activity anActivity) {
6listItems = aListItems;
7activity = anActivity;
8}
9
10public void onItemClick(AdapterView parent, View view, int pos, long id) {
11Intent i = new Intent(Intent.ACTION_VIEW);
12i.setData(Uri.parse(listItems.get(pos).getLink()));
13activity.startActivity(i);
14}
15}
441
2public class MainActivity extends Activity {
3
4"ParserError") (
5
6public void onCreate(Bundle savedInstanceState) {
7super.onCreate(savedInstanceState);
8setContentView(R.layout.main);
9try {
10RssReader rssReader = new RssReader("http://mic87xp1.altervista.org/wordpress/?feed=rss2");
11ListView itcItems = (ListView) findViewById(R.id.listMainView);
12ArrayAdapter adapter = new ArrayAdapter(this,android.R.layout.simple_list_item_1, rssReader.getItems());
13itcItems.setAdapter(adapter);
14itcItems.setOnItemClickListener(new ListListener(rssReader.getItems(), this));
15} catch (Exception e) {
16Log.e("RssReader", e.getMessage());
17noInternetDialog();
18}
19}
20
21
22public boolean onCreateOptionsMenu(Menu menu) {
23getMenuInflater().inflate(R.menu.main, menu);
24return true;
25}
26private void noInternetDialog(){
27
28AlertDialog.Builder builder = new AlertDialog.Builder(this);
29builder.setTitle("Errore");
30builder.setMessage("Impossibile trovare il canale Feed Rss.\nControllare la connessione ad internet e eventualmente contattare lo sviluppatore");
31builder.setCancelable(false);
32builder.setPositiveButton("Ok", new OkPositiveButton());
33AlertDialog alert = builder.create();
34alert.show();
35
36}
37class OkPositiveButton implements DialogInterface.OnClickListener{
38public void onClick(DialogInterface dialog, int which){
39dialog.dismiss();
40}
41}
42
43
44}
Logcat Galaxy S:
Nel Manifest ho messo questo permesso:codice:08-07 21:53:15.044: D/AndroidRuntime(11093): >>>>>> AndroidRuntime START com.android.internal.os.RuntimeInit <<<<<< 08-07 21:53:15.044: D/AndroidRuntime(11093): CheckJNI is OFF 08-07 21:53:15.052: D/AndroidRuntime(11093): setted country_code = ITALY 08-07 21:53:15.052: D/AndroidRuntime(11093): setted sales_code = OMN 08-07 21:53:15.052: D/AndroidRuntime(11093): readGMSProperty: start 08-07 21:53:15.052: D/AndroidRuntime(11093): readGMSProperty: already setted!! 08-07 21:53:15.060: D/AndroidRuntime(11093): readGMSProperty: end 08-07 21:53:15.076: D/PoliciesMultiplexer(8605): grouping policies by name 08-07 21:53:15.076: D/PoliciesMultiplexer(8605): grouped policies by name 08-07 21:53:15.076: D/PoliciesMultiplexer(8605): finding the strongest policies 08-07 21:53:15.076: D/PoliciesMultiplexer(8605): found the strongest policies 08-07 21:53:15.076: D/PoliciesMultiplexer(8605): applying policies to the device 08-07 21:53:15.083: D/ExchangeService(8655): collect eas accounts 08-07 21:53:15.099: D/ExchangeService(8655): onAccountChanged(): mAccountList size is 1 08-07 21:53:15.123: I/ExchangeService(8655): updateAccountDb start 08-07 21:53:15.123: I/ExchangeService(8655): 3: in offpeak=[-2] db interval=[-2] 08-07 21:53:15.138: D/EmailProvider(8617): getDB first open?false 08-07 21:53:15.138: D/EmailProvider(8617): get used db ok 08-07 21:53:15.138: I/ExchangeService(8655): updateAccountDb end 08-07 21:53:15.138: D/ActivityThread(8617): Loading provider com.android.email.provider;com.android.email.notifier: com.android.email.provider.EmailProvider 08-07 21:53:15.177: D/PoliciesMultiplexer(8605): update 08-07 21:53:15.177: D/PoliciesMultiplexer(8605): getAllPolicies 08-07 21:53:15.185: D/PoliciesMultiplexer(8605): grouping policies by name 08-07 21:53:15.185: D/PoliciesMultiplexer(8605): grouped policies by name 08-07 21:53:15.185: D/PoliciesMultiplexer(8605): finding the strongest policies 08-07 21:53:15.185: D/PoliciesMultiplexer(8605): found the strongest policies 08-07 21:53:15.185: D/PoliciesMultiplexer(8605): applying policies to the device 08-07 21:53:15.208: I/ExchangeService(8655): updateAccountDb start 08-07 21:53:15.208: I/ExchangeService(8655): 3: in offpeak=[-2] db interval=[-2] 08-07 21:53:15.216: I/ExchangeService(8655): updateAccountDb end 08-07 21:53:15.240: D/LibQmg_native(11093): register_android_app_LibQmg 08-07 21:53:15.271: D/AndroidRuntime(11093): Calling main entry com.android.commands.am.Am 08-07 21:53:15.279: I/power(210): *** acquire_dvfs_lock : lockType : 1 freq : 1008000 08-07 21:53:15.279: I/ActivityManager(210): START {intent.toShortString} from pid 11093 08-07 21:53:15.279: D/PowerManagerService(210): acquireDVFSLockLocked : type : DVFS_MIN_LIMIT frequency : 1008000 uid : 1000 pid : 210 tag : ActivityManager 08-07 21:53:15.279: W/ActivityManager(210): mDVFSLock.acquire() 08-07 21:53:15.294: D/dalvikvm(8605): GC_EXPLICIT freed 363K, 10% free 7795K/8647K, paused 2ms+3ms 08-07 21:53:15.341: D/KeyguardViewMediator(210): setHidden false 08-07 21:53:15.357: D/AndroidRuntime(11093): Shutting down VM 08-07 21:53:15.357: D/ActivityManager(210): Trying to launch applicationName 08-07 21:53:15.365: D/dalvikvm(11093): GC_CONCURRENT freed 102K, 81% free 509K/2560K, paused 0ms+1ms 08-07 21:53:15.365: D/jdwp(11093): Got wake-up signal, bailing out of select 08-07 21:53:15.365: D/dalvikvm(11093): Debugger has detached; object registry had 1 entries 08-07 21:53:15.373: I/AndroidRuntime(11093): NOTE: attach of thread 'Binder Thread #3' failed 08-07 21:53:15.373: D/OpenGLRenderer(10353): Flushing caches (mode 1) 08-07 21:53:15.388: D/KeyguardViewMediator(210): setHidden false 08-07 21:53:15.412: E/ITCRssReader(10865): Couldn't open http://mic87xp1.altervista.org/wordpress/?feed=rss2 08-07 21:53:15.427: D/STATUSBAR-StatusBarManagerService(210): setSystemUiVisibility(0x0)
21
2<uses-permission android:name="android.permission.INTERNET" />
Forse ne devo aggiungere altri?