Android api, pobieranie źródła strony

Odpowiedz Nowy wątek
2012-11-14 14:12
janek1231
0

Cześć,
piszę aplikację pod Android 4.0 i mam problem z pobraniem źródła strony(internet).
MOJE KODY:

MainActivity.java

package com.example.gj;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.widget.Toast;

public class MainActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        try {
            String source="";
            URL url;
            url = new URL("http://localhost/gj-webservice/rest_login.php");
            InputStream response = url.openStream();
            BufferedReader reader = new BufferedReader(new InputStreamReader(response));
            for (String line; (line = reader.readLine()) != null;) {
                source+=line;
            }
            reader.close();
            Toast.makeText(getApplicationContext(), source, Toast.LENGTH_LONG).show();
        } catch (MalformedURLException e) {
            // TODO Auto-generated catch block
            Toast.makeText(getApplicationContext(), (CharSequence) e, Toast.LENGTH_LONG).show();

        } catch (IOException e) {
            // TODO Auto-generated catch block
            Toast.makeText(getApplicationContext(), (CharSequence) e, Toast.LENGTH_LONG).show();

        }

        Toast.makeText(getApplicationContext(), "xxxx", Toast.LENGTH_LONG).show();
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }
}

AndroidManifest.xml

 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.gj"
    android:versionCode="1"
    android:versionName="1.0" >
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
    <uses-sdk
        android:minSdkVersion="14"
        android:targetSdkVersion="15" />

    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MainActivity"
            android:label="@string/title_activity_main" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

Po uruchomieniu pojawia mi się komunikat, że aplikacja musiała zostać zamknięta. a konsola w Eclipse zwraca mi komunikat
"Nawiązane połączenie zostało przerwane przez oprogramowanie zainstalowane w komputerze-hoście".

Macie może pomysł o co chodzi? co mam źle? A może znacie jakieś lepsze rozwiązanie?

dzięki z góry ;)

Pozostało 580 znaków

2012-11-14 14:35
0

A co by ci to miało pobrać? o_O Zdajesz sobie sprawę z tego że powinieneś tu mieć normalny adres IP a nie localhost? Problem w tym że adres jest z d**y, więc się strona nie otwiera a ty chcesz z tego czytać.


Masz problem? Pisz na forum, nie do mnie. Nie masz problemów? Kup komputer...

Pozostało 580 znaków

2012-11-14 15:12
janek1231
0

Racja, ale podawałem też normalne adresy np "www.wp.pl", "http://www.wp.pl", "http://212.77.100.101", "212.77.100.101" - problem nie znika.
O co może chodzić?

Pozostało 580 znaków

2012-11-14 15:17
0

Włącz logger na androidzie i pokaż stacktrace


Masz problem? Pisz na forum, nie do mnie. Nie masz problemów? Kup komputer...

Pozostało 580 znaków

2012-11-15 10:40
janek1231
0

a jak to zrobić? nie mogę tego znaleźć.

Ale zauważyłem coś jeszcze. Przerobiłem program tak, żeby połączenie i pobieranie źródła następowało po kliknięciu na Button.
Uruchomiłem program na dwóch urządzeniach, podłączonych do tego samego łącza internetowego:

  1. Telefon Samsung Galaxy Mini (android 2.2.1)
  2. Tablet GoClever TAB a93 (android 4.0.4). Aplikacja napisana jest pod Android 2.1.

Na telefonie wszystko działa tak jak należy, a na tablecie aplikacja uruchamia się ok ale po kliknięciu na Button wyskakuje komunikat "Aplikacja musiała zostać nieoczekiwanie zamknięta".

Tę samą aplikację skompilowałem również pod Android 4.0 - efekt na tablecie ten sam, na telefonie oczywiście się nie uruchomiło ze względu na wersję systemu.

Załączam aktualny kod:

package com.example.gj;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

public class MainActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button next = (Button) findViewById(R.id.button1);
        next.setOnClickListener(new View.OnClickListener() {

            public void onClick(View view) {
                try {
                    String x = pobierz("http://www.google.pl");
                    Toast.makeText(getApplicationContext(), x, Toast.LENGTH_LONG).show();
                } catch (MalformedURLException e) {
                    Toast.makeText(getApplicationContext(), (CharSequence) e, Toast.LENGTH_LONG).show();
                } catch (IOException e) {
                    Toast.makeText(getApplicationContext(), (CharSequence) e, Toast.LENGTH_LONG).show();

                }
            }
        }); 
    }
    public static String pobierz(String link) throws MalformedURLException, IOException {
        String source = "";
        URL akt = new URL(link);
        BufferedReader in = new BufferedReader(new InputStreamReader(akt.openStream(), "utf-8"));
        String linia;
        while ((linia = in.readLine()) != null) {
            source += linia + "\n";
        }
        in.close();
        return source;
    }
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }
}

pozdrawiam :)

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0