Website als App

  • Antworten:20
Audioline
  • Forum-Beiträge: 18

03.07.2013, 14:32:43 via Website

Hallo zusammen,
wie der Titel schon sagt, möchte ich eine App erstellen, die im Prinzip nur den Inhalt einer Website lädt. Allerdings soll sie nicht nur die normale Website laden, sondern ich möchte zum Beispiel immer den neusten bzw. einzelne Artikel laden. Jetzt ist meine Frage, wie ich das am besten machen sollte. Soll ich den den Seitenquelltext durchsuchen bis ich an der Stelle bin die den Pfad des Artikels angibt oder habt ihr andere Ideen? Und nein, andere Threads wie https://www.nextpit.de/de/android/forum/thread/464235/Webseite-als-Android-App-apk-Datei hat mir nicht weitergeholfen!
P.S. Vielen Dank, wäre schön wenn mir einer dabei helfen könnte.

— geändert am 03.07.2013, 14:33:07

Antworten
impjor
  • Forum-Beiträge: 1.793

03.07.2013, 15:00:51 via Website

Also prinzipiell kann eine WebView eine beliebige Internetseite anzeigen. Dazu übergibst du ihr die URL oder den Quelltext.
Die Frage war nun, glaube ich, dass deine URL dynamisch sein soll, da ja immer eine andere Seite (mit dem neusten Artikel) geladen werden muss.

Nun wäre es gut zu wissen, ob es deine Website ist, dann könntest du eine einfache API erstellen, oder eine neue Seite, die automatisch den neusten Artikel lädt (über php z.B.).
Sonst bliebe nur die Möglichkeit auf vorhanden APIs zurückzugreifen (wenn die Seite so etwas anbietet) oder wirklich den Quelltext zu durchsuchen, was aber natürlich eine unschöne Möglichkeit ist.

Gruß

Liebe Grüße impjor.

Für ein gutes Miteinander: Unsere Regeln
Apps für jeden Einsatzzweck
Stellt eure App vor!

Antworten
Audioline
  • Forum-Beiträge: 18

03.07.2013, 15:08:57 via Website

Erstmal vielen Dank für die schnelle Antwort. Nein es ist nicht meine Website. Wäre es möglich, dass du mir bei den APIs hilfst, bzw bei der App (bin schon was länger draussen..)?

Antworten
impjor
  • Forum-Beiträge: 1.793

03.07.2013, 16:42:56 via Website

Na, wenn die die Website keine API hat, musst du es wahrscheinlich wirklich über den Quelltext machen, oder du fragst den Websiten-Betreiber, ob er dir etw. zur Verfügung stellen kann.

Btw. Habe leider keine Zeit um so was zu machen. Wenn du ein Budget hast, kannst du ja im Job-Suche posten.
Gruß

Liebe Grüße impjor.

Für ein gutes Miteinander: Unsere Regeln
Apps für jeden Einsatzzweck
Stellt eure App vor!

Antworten
Andy N.
  • Forum-Beiträge: 3.112

03.07.2013, 20:22:46 via Website

Du solltest Dir erst mal sicher sein, dass Du auch den Inhalt der Internetseite für Deine App verwenden darfst.

Wenn ja, schau doch erst mal, ob es einen RSS-Feed gibt. Wenn es sowas gibt, ist es wohl am einfachsten den in der App auszugeben.

Antworten
Audioline
  • Forum-Beiträge: 18

08.07.2013, 23:12:34 via Website

Sollte sich erledigt haben

— geändert am 08.07.2013, 23:25:07

Antworten
Estoy
  • Forum-Beiträge: 2.150

09.07.2013, 00:07:14 via App

Wen es Schonmal so ein thread gibt kann ich auch gleich mal eine frage stellen, undzwar kennt jemand von euch eine "einfache" Art eine App für ein YouTubeer zu programmieren also nicht einfach YouTube sondern ungefähr so wie die von Ali-A geht das ohne ein eigenen Server zu benutzen?

Antworten
Gelöschter Account
  • Forum-Beiträge: 115

09.07.2013, 01:20:51 via Website

Hallo Sgt G,

Da ich leider nicht genau verstehe was du meinst und ich die App von Ali-A nicht kenne, kann ich nur raten was du willst und hoffen das es richtig ist :P
Wenn es darum geht Youtube Videos innerhalb der App zu verwenden, könnte man die YouTube Android Player API nehmen.

Grüße

Teste dein IT-Wissen! - IT Quiz

Antworten
Estoy
  • Forum-Beiträge: 2.150

09.07.2013, 07:37:46 via App

Genau das meine ich :grin: Sorry war gestern schon ein bißchen spät :grin:

— geändert am 09.07.2013, 07:38:11

Antworten
Audioline
  • Forum-Beiträge: 18

09.07.2013, 15:51:12 via Website

Ok ich brauch doch nochmal Hilfe von euch^^. Egal welche Quelle ich ausprobiere ich bekomme immer eine Fehlermeldung: android.os.BinderProxy.....
Fehlt mir vielleicht irgendeine Berechtigung (hab Internet, Access/Change network State). Die App hängt sich folglich immer auf bzw wird automatisch geschlossen. Und wie kann ich bei dem neuen Android Studio im Debugger einfach eine Zeile weiter gehen. Nicht Step Into sondern wie man das bei Eclipse auch konnte einfach zum nächsten Befehl. Dank schonmal im voraus.
PS https://www.nextpit.de/de/android/forum/thread/548908/HTML-Code-einer-Webseite-bekommen das geht auch nicht bei mir. Allerdings scheint was nicht mim Code zu stimmen

— geändert am 09.07.2013, 16:01:16

Antworten
impjor
  • Forum-Beiträge: 1.793

09.07.2013, 16:13:15 via Website

Audioline
Allerdings scheint was nicht mim Code zu stimmen
Naja, denn solltest du uns dann posten. Am besten, mit entsprechender LogCat-Ausgabe, wenn ein Laufzeitfelher vorliegt.

Gruß
PS: Hast du das herunterladen der Website auf einen anderen Thread ausgelagert(AsyncTask, etc.)?

Liebe Grüße impjor.

Für ein gutes Miteinander: Unsere Regeln
Apps für jeden Einsatzzweck
Stellt eure App vor!

Antworten
Audioline
  • Forum-Beiträge: 18

09.07.2013, 16:23:24 via Website

Es ist kein Laufzeitfehler. Momentan handelt es sich um den Code von https://www.nextpit.de/de/android/forum/thread/548908/HTML-Code-einer-Webseite-bekommen um genauer zu sein vom user Pascal P. Hab mir AsyncTask etc noch nichts zu tun gehabt bzw keine Ahnung davon^^. Bei manchen Quellen, die ich ausprobiert hab kam im übrigen die folgende Fehlermeldung Unbind failed: could not find connection for android.os.BinderProxy@411709f8. Bzw. diese ist mir am häufigsten im Logcat aufgefallen

— geändert am 09.07.2013, 18:03:18

Antworten
impjor
  • Forum-Beiträge: 1.793

09.07.2013, 20:53:45 via App

Audioline
Es ist kein Laufzeitfehler.
Dann wird ja was von Eclipse angemeckert, oder?
AsyncTask etc noch nichts zu tun gehabt bzw keine Ahnung davon^^.
Aber der Internetvorgang wird auf einem anderen Thread durchgeführt, sonst ist dir der Laufzeitfehler sicher! (NetworkOnMainThreadException)
Bei manchen Quellen, die ich ausprobiert hab kam im übrigen die folgende Fehlermeldung Unbind failed: could not find connection for android.os.BinderProxy@411709f8. Bzw. diese ist mir am häufigsten im Logcat aufgefallen
Bleiben wir doch erstmal bei einem Code, den du ausprobierst und ggf. postest, mit den Fehlern von Eclipse oder den Laufzeitfehler (LogCat)!

Gruß

— geändert am 09.07.2013, 20:54:05

Liebe Grüße impjor.

Für ein gutes Miteinander: Unsere Regeln
Apps für jeden Einsatzzweck
Stellt eure App vor!

Antworten
Audioline
  • Forum-Beiträge: 18

09.07.2013, 22:34:45 via Website

Aber der Internetvorgang wird auf einem anderen Thread durchgeführt, sonst ist dir der Laufzeitfehler sicher! (NetworkOnMainThreadException)


was meinst du genau damit? Meinst du damit, dass ich eine 2 Activity machen soll die ein Thread ist und die in der 1 Activity aufrufen muss?

— geändert am 09.07.2013, 22:38:34

Antworten
impjor
  • Forum-Beiträge: 1.793

09.07.2013, 23:06:16 via App

Nein. Threads sind dafür dar mmehrere Aufgaben gleichzeitig zu erledigen*.
Stell dir vor, deine App ist hat eine 'angsame Mobilfunk Internet und du benutzt einen Thread, d.h. Android macht für deine App nur eine Sache: nämlich das doownloaden. Währenddessen kann es aber nicht um die Benutzeroberfläche kümmern: Alle Buttons könnnen nicht betätigt werden, der Bildschirm ändert sich nicht (das drehen eines Ladekreises ist so unmöglich).
Da das alles nicht Nutzerfreundlich ist, hat Google festgelegt, dass man auf dem MainThread (der, der sich um die Benutzeroberfläche kümmert) keinen Internetzugriff machen darf.
Stattdessen verwendest du einfach

new Thread(new Runnable {
public void run() {
dein Code
}
}).start();

Gruß

*meistens werden die Sachen nicht wirklich parallel gemacht, aber das OS erweckt den Eindruck, damit muss man sich aber nicht beschäftigen.

— geändert am 09.07.2013, 23:08:06

Liebe Grüße impjor.

Für ein gutes Miteinander: Unsere Regeln
Apps für jeden Einsatzzweck
Stellt eure App vor!

Antworten
Audioline
  • Forum-Beiträge: 18

10.07.2013, 20:15:23 via Website

Es funktioniert immer noch nicht. Mir wär es auch lieber wenn ich verstehe was ich da mache anstatt irgendein Code ausm Internet zu kopieren. Weiß jemand die vorgehensweise. Oder die API's die ich durchlesen sollte?. Danke im vorraus

Antworten
Christian
  • Forum-Beiträge: 307

10.07.2013, 21:42:46 via Website

Hi audioline,


Es funktioniert immer noch nicht
und nochmal was sagt die Logcat bzw. wie sieht den dein Code aus?


Oder die API's die ich durchlesen sollte?.
das Android SDK enthält keine APIs um ne Websiten zu parsen.

Eine Frage verstehst du den Code von Pascal P. ?
Weil das ist der einfachste Weg ne Website aus zu lesen wenn es ein bissel aufwendiger sein soll müsstest du mal nach einem HTML Parser bei google suchen.

Mfg Christian

— geändert am 10.07.2013, 21:43:04

Antworten
Audioline
  • Forum-Beiträge: 18

10.07.2013, 22:23:32 via Website

Vielen Dank für deine Antwort. Zuerst versteh ich nicht genau was der Code macht. Ich vermute mal: httpclient ist dafür zuständig das ich die Request etc. überhaupt erst benutzen kann. httprequest sendet eine Anfrage an den http client. httpresponse sagt mir garnichts genauso wie inputstream und stringbuilder. Trotzdem hab ich das jetzt mal mit dem Code versucht in Verbindung mit dem Tipp von impjor. Da zeigt mir das Android Studio schon fehler an. U.a.: - client.execute(request); unhandled exeption
response.getEntity().getContent(); unhandled exeption
reader.readLine()
in.close();
Bei allen der selbe Fehler. Mach ich es ohne den tipp von impjor genau das gleiche. Der Code sieht so aus:
1new Thread(new Runnable() {
2 @Override
3 public void run() {
4 String url = "https://www.nextpit.de/de/android/forum/thread/548908/HTML-Code-einer-Webseite-bekommen";
5
6 HttpClient client = new DefaultHttpClient();
7 HttpGet request = new HttpGet(url);
8 HttpResponse response = client.execute(request);
9
10 String html = "";
11 InputStream in = response.getEntity().getContent();
12 BufferedReader reader = new BufferedReader(new InputStreamReader(in));
13 StringBuilder str = new StringBuilder();
14 String line = null;
15 while((line = reader.readLine()) != null)
16 {
17 str.append(line);
18 }
19 in.close();
20 html = str.toString();
21
22 }
23 }).start();

Antworten
Christian
  • Forum-Beiträge: 307

10.07.2013, 22:56:22 via Website

Hi,


httpresponse sagt mir garnichts
Einfach ausgedrückt es ist die Antwort auf deine Anfrage. Doku:HttpResponse


wie inputstream
Ein Stream auf den Inhalt der Anfrage. InputStream sind ein elementarer bestandteil von Java um Daten zu lesen Link: Java Inputstream


stringbuilder
siehe Doku: StringBuilder


Da zeigt mir das Android Studio schon fehler an. U.a.: - client.execute(request); unhandled exeption
response.getEntity().getContent(); unhandled exeption
reader.readLine()
in.close();
Die Fehlermeldung besagt das du diese Stellen mit Exceptions absicher sollst.

Zum Beispiel so:
1HttpResponse response = null;
2try {
3 response = client.execute(request);
4} catch (ClientProtocolException e) {
5 // TODO Auto-generated catch block
6 e.printStackTrace();
7} catch (IOException e) {
8 // TODO Auto-generated catch block
9 e.printStackTrace();
10}

Android Studio ist zwar noch in der Beta aber hier sollte dir eigentlich die IDE helfen Eclipse macht das jedenfalls.

Sag mal hast du schon mal in Java programmiert?

Mfg Christian

Antworten
Audioline
  • Forum-Beiträge: 18

10.07.2013, 23:03:36 via Website

Ich hatte ein kleineres Schulprojekt für Android OS programmiert aber richtig Java gelernt hab ich nicht gelernt, bin allerdings auch schon was länger draussen... deshalb entschuldige meine Fragen ;). Hab versucht die Grundkenntnisse die ich von c# hatte zu übernehmen. Und Danke für deine Antwort werd es gleich mal ausprobieren.

Antworten
Qpa
  • Forum-Beiträge: 75

11.07.2013, 08:24:12 via Website

Android Studio bietet dir eigentlich bei jedem Syntax Fehler oder alles andere was direkt in der IDE rot unterzeichnet wird einen QuickFix an.

Dafür einfach auf die Stelle Klicken und es kommt weiter links ein kleines popup Menu das dir dann verschiedene Dinge anbietet.
Wie auch zum Beispiel das -> surround with try catch.


Gruß

Antworten