Bilderliste laden

  • Antworten:43
Rodriguez
  • Forum-Beiträge: 39

03.11.2014, 21:46:57 via Website

Hallo zusammen,

Ich bin immer noch kein erfahrener Programmierer.

Ich habe eine App. Die soll nun die Bilder die auf einer
website aufglistet in der App drin auflisten.
Das heisst sie soll die Website nach Bildern absuchen und in der App drin auflisten.
Durch klicken auf den Namen des Bildes in der App soll man das Bild anschauen können.

Ich habe habe schon von vielen Möglichkeiten gelesen, doch welches ist die einfachste für mein Anliegen?

Wie könnte ich das am besten anstellen?

Vielen Dank freundliche Grüsse

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

04.11.2014, 00:02:56 via App

Ist die Quellseite nur als HTML verfügbar oder bekommst du die Bilder auch noch per xml etc?

Falls es nur html ist würde ich einen Perser z.b jsoup benutzen dort alle Bilder herausfiltern diese dann in ImageViews packen und anzeigen.So kompliziert ist das ganze garnicht.

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Rodriguez
  • Forum-Beiträge: 39

09.11.2014, 14:01:53 via Website

Ja nur html

Also ich kenne mich mit jsoup nicht aus habe es mit Hilfen versucht nachzustellen

Bei mir ist folgendes rausgekommen

public void downloadKlick(View view) {
    setContentView(R.layout.bilder);


    class Logo extends AsyncTask<Void, Void, Void> {
        String url = "url";
        Bitmap bitmap;




        protected Void doInBackground(Void... params) {

            try {
                Document document = Jsoup.connect(url).get();
                Elements img = document.select("img[src$=.jpg]");
                String imgSrc = img.attr("src");
                InputStream input = new java.net.URL(imgSrc).openStream();
                bitmap = BitmapFactory.decodeStream(input);

            } catch (IOException e) {
                System.err.println("Ein Fehler ist augetreten");
                e.printStackTrace();
            }
            return null;
        }

        @Override
        protected void onPostExecute(Void result) {
            ImageView logoimg = (ImageView) findViewById(R.id.show2);
            logoimg.setImageBitmap(bitmap);
        }
    }
    }

sobold ich auf den Button klicke passeirt gar nichts.

Was habe ich falsch gemacht?

— geändert am 09.11.2014, 14:03:13

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

09.11.2014, 14:11:27 via Website

  1. Der AsyncTask ist eine eigene Klasse und sollte zur übersichtlichkeit in eine eigenen Java Datei ausgelagert werden.
  2. Wenn du den Task dann ausgelagert hast, musst du den Asynctask intitalisierten( ein neues Objekt anlegen) und dann mit #execute() starten.
  3. was soll mit dem Bitmap passieren?
    bedenke, dass ein AsyncTask ein eigener Thread ist und du damit keine UI elemente ädern kannst/darfst.
    D.h. du musst das heruntergeladene BitmapObjekt in den Mainthread transportieren (stichwort onPostExecute) und dann in der Activity kannst du das Bild dann auf eine Image View etzen.

Kommen evntl. noch andere Fehler?

LG Pascal

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Rodriguez
  • Forum-Beiträge: 39

09.11.2014, 19:28:52 via Website

Also ich lasse es einfachhaltslieber in dieser Activity, da sonst findViewById nicht funktioniert. (Konnte sonst keine Lösung finden um das zu umgehen, seit Stunden :( )

protected void onPostExecute(Bitmap result) {
            ImageView imageView = (ImageView) findViewById(R.id.show2);
            imageView.setImageBitmap(result);

Das sollte ja eigentlich auch funktionieren.

Der Quelltext der Seite sieht folgendermassen aus:

image

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

09.11.2014, 20:18:55 via App

Um das zu lösen musst du ein Callback benutzen.
Und dann mal Prüfen was für ein Imagepfad jsoup herausbekommt vlt. muss du den noch mit der website vorne vervollständigen, da ja der link nur relativ ist.

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Rodriguez
  • Forum-Beiträge: 39

09.11.2014, 22:47:39 via Website

:( (entschuldige, bin nicht so ein profi)
Wie könnte den so ein Callback aussehen?

Antworten
Rodriguez
  • Forum-Beiträge: 39

10.11.2014, 20:48:50 via Website

Danke. Aber ich habe mehrere von solchen Tutorailwebsites durchstöbert. Jedoch
weiss ich nicht wie ich eine solche Callback-Methode in meiner
Anwendung einzusetzen ist.
Könntest du mir das evtl. zeigen?
(Ich versuche besser zu werden, habe den gesamtüberblick
von Java immer noch nicht)

Antworten
Rodriguez
  • Forum-Beiträge: 39

10.11.2014, 23:09:13 via Website

Ich wäre dir sehr dankbar. Ich brauche hunderte Stunden und komme nicht weiter.
Du hast vielleicht 5min (denke ich)

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

11.11.2014, 16:34:06 via App

Was ist denn das genaue Problem?
Bzw. was verstehst an Callbacktuts nicht?
http://www.edumobile.org/android/android-development/how-to-implement-callback-method/

Wenn ich dir alles vorsage dann hast du selber keinen Vorteil von. Besser ist es du verstehst es und kannst es auch auf andere Problematik anwenden.

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Rodriguez
  • Forum-Beiträge: 39

11.11.2014, 20:38:22 via Website

Ich versuche es auch. Geht irgendwie vom aufbau her nicht.

Folgendes habe ich in der Main Activity

public void downloadKlick(View view) {
    setContentView(R.layout.besser);
    SubClass mySubClass;



    mySubClass = new SubClass();

    mySubClass.registerCallback(this);

    @Override
    public void callbackReturn() {
    textResult.setText("Callback function called");


}

Dabei wird callbackReturn, RegisterCallback und textResult als Fehler markiert.

in der subClass
dann folgendes

public class SubClass {

String url = "ramsiprojekt.bplaced.net/dateien";
Bitmap bitmap;

 interface MyCallbackClass{
        void callbackReturn();
    }

 void doSomething(){


            try {
                Document document = Jsoup.connect(url).get();
                Elements img = document.select("img[src$=.jpg]");
                String imgSrc = img.attr("src");
                InputStream input = new java.net.URL(imgSrc).openStream();
                bitmap = BitmapFactory.decodeStream(input);

            } catch (IOException e) {
                System.out.println("There was an error");
                e.printStackTrace();
            }
            }


        protected void onPostExecute(Bitmap result) {
            ImageView imageView = (ImageView) findViewById(R.id.show2);
            imageView.setImageBitmap(result);
       }

  SubClass.callbackReturn();
 }

Hier wird findViewbyid und callbackreturn als Fehler markiert.

Hilf mir bitte :'(

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

11.11.2014, 20:52:19 via App

public void downloadKlick(View view) {
  setContentView(R.layout.besser);
  SubClass mySubClass;



  mySubClass = new SubClass();

    >mySubClass.registerCallback(new 

MyCallbackClass(){

    @Override
    public void callbackReturn() {
    textResult.setText("Callback function called");

//Hier muss dann find View by ID etc rein. Vergiss nicht der Code muss in einer Activity stehen

  }

}

public class SubClass {

String url = "ramsiprojekt.bplaced.net/dateien";
Bitmap bitmap;

MyCallbackClass callback;
interface MyCallbackClass{
void callbackReturn();
}

public void registerCallback(MyCallbackClass myCallback)
{
callback= myCallback;//Callback als >Klassenvar setzen

}
void doSomething(){

          try {
              Document document = Jsoup.connect(url).get();
              Elements img = document.select("img[src$=.jpg]");
              String imgSrc = img.attr("src");
              InputStream input = new java.net.URL(imgSrc).openStream();
              bitmap = BitmapFactory.decodeStream(input);

          } catch (IOException e) {
              System.out.println("There was an error");
              e.printStackTrace();
          }
          }


      protected void onPostExecute(Bitmap result) {
          callback.callbackReturn();
     }

}

So reicht dir das?
Ich hab dazu auch noch ein paar anmerkungen gemacht.
Falls du Parameter übergeben willst diese einfach als Normale Methodenparameter hinzufügen.

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Rodriguez
  • Forum-Beiträge: 39

11.11.2014, 23:40:24 via Website

Vielen Dank.

Intent intent = new Intent();
ImageView imageView = (ImageView) findViewById(R.id.show2);
imageView.setImageBitmap(result);
startActivity(intent);

Ich habe folgendes Muster.

setImageBitmap(XXXX)

was kommt dort rein. Bei mir funkt das nicht.
Auch wenn ich das ohne imageView mache habe ich das Gefühl
das im hintergrund gar nichts abläuft.

Antworten
Rodriguez
  • Forum-Beiträge: 39

11.11.2014, 23:41:30 via Website

(Ich will dir sagen, dass du dir viel Zeit nimmt für das alles, danke nochmals)

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

11.11.2014, 23:57:06 via App

  1. setImageBitmap --> kommt eine Bitmap rein (z.B. dein result)
  2. startActivity macht nichts wenn du der Intent nicht sagst welche Klasse aufgerufen werden soll

Android Developer

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

12.11.2014, 06:14:41 via App

Du musst das ohne Intent machen einfach als Methode in den Klammern übergeben..

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Rodriguez
  • Forum-Beiträge: 39

12.11.2014, 23:40:42 via Website

Ich komm nich ganz nach :/

Wie hast du das gemeint?

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

13.11.2014, 07:17:40 via App

so in etwa:
Callback.callbackReturn(Bitmap);

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Rodriguez
  • Forum-Beiträge: 39

13.11.2014, 10:02:42 via Website

Ok. Abr ich meinte wie ich die imageView findView byid
hinstellen kann.

(Danke für deine Antworten)

Antworten
Sven R.
  • Forum-Beiträge: 1.904

13.11.2014, 13:47:26 via App

In der Implementation des Callbacks kannst du deinen Code zum Ändern des Bitmaps schreiben. Dahin kommt auch das findViewById().

Wenn dir mein Beitrag gefällt, kannst dich einfach mit dem 👍 "Danke"-Button auf der Website dieses Forums bedanken. 😀

Why Java? - Because I can't C#

Antworten
Rodriguez
  • Forum-Beiträge: 39

13.11.2014, 20:11:44 via Website

Ok danke für die Anwort

mySubClass.registerCallback(new MyCallbackClass(){
            public void callbackReturn(Bitmap result) {
                ImageView imageView = (ImageView) findViewById(R.id.show2);
                TextView textResult = (TextView) findViewById(R.id.antwort);
                textResult.setText("Callback function called");
                imageView.setImageBitmap(result);
            //Hier muss dann find View by ID etc rein. Vergiss nicht der Code muss in einer Activity stehen

              }

Also solle das so aussehen

Ich bekomme folgende Fehlermedlung

The type new SubClass.MyCallbackClass(){} must implement the inherited abstract method SubClass.MyCallbackClass.callbackReturn()

Ich weiss nicht wieseo. callbackReturn() ist ja schon implementiert

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

13.11.2014, 20:25:34 via App

Vor das callbackReturn muss noch ein @override statement hin, da die Methode überschrieben werden muss

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Rodriguez
  • Forum-Beiträge: 39

13.11.2014, 20:35:32 via Website

Ja, das habe ich mir auch überlegt. Aber dann bekomme ich mehrere Fehlermeldungen

mySubClass.registerCallback(new MyCallbackClass(){
            @Override
            public void callbackReturn(Bitmap result) {
                ImageView imageView = (ImageView) findViewById(R.id.show2);
                TextView textResult = (TextView) findViewById(R.id.antwort);
                textResult.setText("Callback function called");
                imageView.setImageBitmap(result);
            //Hier muss dann find View by ID etc rein. Vergiss nicht der Code muss in einer Activity stehen

              }

Zum einen wird callbackReturn(Bitmap result)als Feher markiert mit dem Text

The method callbackReturn(Bitmap) of type new SubClass.MyCallbackClass(){} must override or implement a supertype method

Und der oben genannte Fehler bleibt. Ich verstehe nicht wieso das gemeldet wird, sollte ja aus meiner Sicht
korrekt sein.

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

13.11.2014, 20:36:37 via App

Die Bitmap parameterübergabe muss im Interface auch noch angegeben werden.

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Rodriguez
  • Forum-Beiträge: 39

13.11.2014, 20:55:52 via Website

Also so etwa:

MyCallbackClass callback;
interface MyCallbackClass{
void callbackReturn();
void callbackReturn(Bitmap result);

Ist gegangen danke.

Aber der andere Fehler besteht immer noch:

mySubClass.registerCallback(new MyCallbackClass(){

MyCallbackClass() wir immer noch als Fehler markiert :/ :

The type new SubClass.MyCallbackClass(){} must implement the inherited abstract method SubClass.MyCallbackClass.callbackReturn()

Weisst du wieso das so ist?

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

13.11.2014, 20:58:07 via App

Du musst die Zeile ohne Parameter rauswerfen sonst müssen beide Methoden implementiert werden.

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Rodriguez
  • Forum-Beiträge: 39

13.11.2014, 22:44:29 via Website

Ok. Vielen Dank
Läuft jetzt.

Aber es wird trotzdem kein Bild angezeigt. Es scheint als würde gar nicht im hintergrund ablaufen.

public void downloadKlick(View view) {
      setContentView(R.layout.besser);
      SubClass mySubClass;



      mySubClass = new SubClass();

        mySubClass.registerCallback(new MyCallbackClass(){
            @Override
            public void callbackReturn(Bitmap result) {
                ImageView imageView = (ImageView) findViewById(R.id.show2);
                TextView textResult = (TextView) findViewById(R.id.antwort);
                textResult.setText("Callback function called");
                imageView.setImageBitmap(result);
            //Hier muss dann find View by ID etc rein. Vergiss nicht der Code muss in einer Activity stehen

              }




       }
    );
}

Antworten
Rodriguez
  • Forum-Beiträge: 39

13.11.2014, 22:48:14 via Website

SUBCLASS:

@SuppressWarnings("unused")
public class SubClass {
String url = "ramsiprojekt.bplaced.net/dateien";
Bitmap bitmap;
MyCallbackClass callback;
interface MyCallbackClass{
void callbackReturn(Bitmap result);
}
public void registerCallback(MyCallbackClass myCallback)
{
callback= myCallback;//Callback als >Klassenvar setzen
}
void doSomething(){
try {
Document document = Jsoup.connect(url).get();
Elements img = document.select("img[src$=.jpg]");
String imgSrc = img.attr("src");
InputStream input = new java.net.URL(imgSrc).openStream();
bitmap = BitmapFactory.decodeStream(input);
} catch (IOException e) {
System.out.println("There was an error");
e.printStackTrace();
}
}
protected void onPostExecute(Bitmap result) {
callback.callbackReturn(result);

 }

}

BESSER.XML:

<?xml version="1.0" encoding="utf-8"?>

android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >

<ImageView
    android:id="@+id/show2"
    android:layout_height="match_parent"
    android:layout_width="match_parent"
    android:layout_marginTop="200dp"
    android:contentDescription="@string/vorschau"
    ></ImageView>

<TextView
    android:id="@+id/antwort"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" />

Wieso läuft da nichts ab. :'( :( :'(
Hat da jemand eine Ahnung.
(Sorry wegen dem spam)

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

14.11.2014, 06:17:29 via App

Schau dir mal deine Logik an die Methode doSomething wird nie aufgerufen.
Zudem musst du einen AsyncTask in die LoaderKlasse Implementieren da sachen aus dem Inet geladen werden müssen.

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Rodriguez
  • Forum-Beiträge: 39

14.11.2014, 07:34:35 via Website

Meintest du etwa so:

@SuppressWarnings("unused")

abstract
class SubClass extends AsyncTask {
String url = "ramsiprojekt.bplaced.net/dateien";
Bitmap bitmap;

void doSomething(){ 
    try { 
    Document document = Jsoup.connect(url).get(); 
    Elements img = document.select("img[src$=.jpg]"); 
    String imgSrc = img.attr("src"); 
    InputStream input = new java.net.URL(imgSrc).openStream(); 
    bitmap = BitmapFactory.decodeStream(input); 
    } catch (IOException e) { 
    System.out.println("There was an error"); 
    e.printStackTrace(); 
    } 
    }






MyCallbackClass callback; 
interface MyCallbackClass{ 
void callbackReturn(Bitmap result); 
} 
public void registerCallback(MyCallbackClass myCallback) 
{ 
callback= myCallback;//Callback als >Klassenvar setzen 
} 

protected void onPostExecute(Bitmap result) { 
callback.callbackReturn(result);

 }
}

Antworten
Rodriguez
  • Forum-Beiträge: 39

14.11.2014, 07:42:23 via Website

Wie ist nun folgendes in der MainAcitivity zu definieren:

mySubClass = new SubClass();

?

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

14.11.2014, 14:13:34 via Website

mySubClass = new SubClass(); //Init der Klasse;Init des Callbacks nicht vergessen!
mySubClass.execute();//Evntl. parameter in die Klammern rein.

Beachte, dass der AsyncTesk nicht funktioniert, wenn es keine doInBackground Methode gibt, diese existiert bei dir schon du musst nur noch deine doSomething Methode umbennen und ein @override davor schreiben.

LG

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Rodriguez
  • Forum-Beiträge: 39

14.11.2014, 15:45:45 via Website

Ich habe die MainAcitivity nun folgendermasse:

public void downloadKlick(View view) {
      setContentView(R.layout.besser);
      SubClass mySubClass;

      mySubClass = new SubClass();
      mySubClass.execute();

      mySubClass.registerCallback(new MyCallbackClass(){
          public void callbackReturn(Bitmap result) {
                ImageView imageView = (ImageView) findViewById(R.id.show2);
                TextView textResult = (TextView) findViewById(R.id.antwort);
                textResult.setText("Callback function called");
                imageView.setImageBitmap(result);


              }}
    );
}

Das fuktioniert.

Die SubClass sieht folgendermassen aus:

@SuppressWarnings("unused")
class SubClass extends AsyncTask {
String url = "ramsiprojekt.bplaced.net/dateien";
Bitmap bitmap;

@Override
protected Void doInBackground(Void... params) {
    try { 
    Document document = Jsoup.connect(url).get(); 
    Elements img = document.select("img[src$=.jpg]"); 
    String imgSrc = img.attr("src"); 
    InputStream input = new java.net.URL(imgSrc).openStream(); 
    bitmap = BitmapFactory.decodeStream(input); 
    } catch (IOException e) { 
    System.out.println("There was an error"); 
    e.printStackTrace(); 
    }
    return null; 
    }






MyCallbackClass callback; 
interface MyCallbackClass{ 
void callbackReturn(Bitmap result); 
} 
public void registerCallback(MyCallbackClass myCallback) 
{ 
callback= myCallback;//Callback als >Klassenvar setzen 
} 

protected void onPostExecute(Bitmap result) { 
callback.callbackReturn(result);

 }



}

Leider kam beim ausführen dann folgende Fehlermedlung:

11-14 15:30:38.125: E/AndroidRuntime(18398): java.lang.RuntimeException: An error occured while executing doInBackground()

Wo habe ich den Fehler bei doInBackgoud() gemacht?

(Ich poste den ganzen Code, damit man alle nützlichen Informationen sieht)

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

14.11.2014, 19:29:56 via Website

Auf anhib würde ich mal auf die url tippen:
ramsiprojekt.bplaced.net/dateien sollte immer mit protokoll angegeben werden
also:
http://ramsiprojekt.bplaced.net/dateien
oder
http://www.ramsiprojekt.bplaced.net/dateien

PS: Absichtlich eine falsche URLbzw. dass es die URL nicht gibt?

— geändert am 14.11.2014, 19:30:55

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Sven R.
  • Forum-Beiträge: 1.904

14.11.2014, 19:43:23 via App

Ich würde #execute() und #registerblabla() vertauschen. Es könnte nämlich sein, dass der AsyncTask früher fertig ist, als das die Callbacks gesetzt sind.

Edit: Ist aber unabhängig vom Problem, da ja ein Fehler in doInBackground() ist.

— geändert am 14.11.2014, 19:44:34

Wenn dir mein Beitrag gefällt, kannst dich einfach mit dem 👍 "Danke"-Button auf der Website dieses Forums bedanken. 😀

Why Java? - Because I can't C#

Antworten
Rodriguez
  • Forum-Beiträge: 39

14.11.2014, 20:15:58 via Website

Also di URL sollte eigentlich gehen. Ich habe es nun auch aussprobiert. Manchmal geht es und manchmal nicht.
Vielleicht liegt es am http oder www.

Ich beides versucht geht leider nicht :/

So sieht der komplette fehlercode aus:

11-14 20:12:40.519: E/AndroidRuntime(22191): FATAL EXCEPTION: AsyncTask #1
11-14 20:12:40.519: E/AndroidRuntime(22191): Process: com.androidexample.uploadtoserver, PID: 22191
11-14 20:12:40.519: E/AndroidRuntime(22191): java.lang.RuntimeException: An error occured while executing doInBackground()
11-14 20:12:40.519: E/AndroidRuntime(22191): at android.os.AsyncTask$3.done(AsyncTask.java:300)
11-14 20:12:40.519: E/AndroidRuntime(22191): at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
11-14 20:12:40.519: E/AndroidRuntime(22191): at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
11-14 20:12:40.519: E/AndroidRuntime(22191): at java.util.concurrent.FutureTask.run(FutureTask.java:242)
11-14 20:12:40.519: E/AndroidRuntime(22191): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
11-14 20:12:40.519: E/AndroidRuntime(22191): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
11-14 20:12:40.519: E/AndroidRuntime(22191): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
11-14 20:12:40.519: E/AndroidRuntime(22191): at java.lang.Thread.run(Thread.java:841)
11-14 20:12:40.519: E/AndroidRuntime(22191): Caused by: java.lang.NoClassDefFoundError: org.jsoup.Jsoup
11-14 20:12:40.519: E/AndroidRuntime(22191): at com.example.uploadtoserver.SubClass.doInBackground(SubClass.java:27)
11-14 20:12:40.519: E/AndroidRuntime(22191): at com.example.uploadtoserver.SubClass.doInBackground(SubClass.java:1)
11-14 20:12:40.519: E/AndroidRuntime(22191): at android.os.AsyncTask$2.call(AsyncTask.java:288)
11-14 20:12:40.519: E/AndroidRuntime(22191): at java.util.concurrent.FutureTask.run(FutureTask.java:237)
11-14 20:12:40.519: E/AndroidRuntime(22191): ... 4 more

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

14.11.2014, 20:17:10 via Website

Schau dir mal das an:

Caused by: java.lang.NoClassDefFoundError: org.jsoup.Jsoup

Sieht so aus als ist die Jsoup Lib nicht richtig eingebunden.

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Rodriguez
  • Forum-Beiträge: 39

14.11.2014, 20:42:16 via Website

Stimmt habe ich behoben. Und ausserdem url+imgSrc eingesetzt.

Nun habe ich nur diese Meldung

11-14 20:40:31.090: D/skia(23339): --- SkImageDecoder::Factory returned null

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

14.11.2014, 20:44:48 via Website

Nur nicht zu vorleilig ;)
Ich würde jetzt den Code Schritt für Schritt debuggen also was steht z.b. in String imgSrc = img.attr("src"); drinne?
Ist es eine Sinvolle URL?

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Rodriguez
  • Forum-Beiträge: 39

14.11.2014, 20:53:38 via Website

Also ich weiss nicht genau wie ich den String anzeigen lassen kann.

Ohne url+imgSrc gibt es den folgenden Fehlercode:

11-14 20:50:19.324: W/System.err(23669): java.net.MalformedURLException: Protocol not found: 

11-14 20:50:19.340: W/System.err(23669): at java.net.URL.(URL.java:176)
11-14 20:50:19.340: W/System.err(23669): at java.net.URL.(URL.java:125)
11-14 20:50:19.340: W/System.err(23669): at com.example.uploadtoserver.SubClass.doInBackground(SubClass.java:30)
11-14 20:50:19.340: W/System.err(23669): at com.example.uploadtoserver.SubClass.doInBackground(SubClass.java:1)
11-14 20:50:19.340: W/System.err(23669): at android.os.AsyncTask$2.call(AsyncTask.java:288)
11-14 20:50:19.340: W/System.err(23669): at java.util.concurrent.FutureTask.run(FutureTask.java:237)
11-14 20:50:19.340: W/System.err(23669): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
11-14 20:50:19.340: W/System.err(23669): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
11-14 20:50:19.340: W/System.err(23669): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
11-14 20:50:19.340: W/System.err(23669): at java.lang.Thread.run(Thread.java:841)

Und mit den oben genannten.

Antworten
Rodriguez
  • Forum-Beiträge: 39

14.11.2014, 20:54:29 via Website

*und mit url+imgsrc, den oben genannten fehlercode

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

14.11.2014, 21:07:31 via Website

Ich verstehe gerade nur die hälfte..
Warum tritt der Feher nun auf bzw. was hast du geändert?

Für eine einfache ausgabe könntest du z.b.

Log.d("LoggingTag",string);

verwenden.
Dann wird dir der übergebene String in LogCat angezeigt.

LG Pascal

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Sven R.
  • Forum-Beiträge: 1.904

15.11.2014, 12:04:34 via App

Rodriguez

11-14 20:50:19.324: W/System.err(23669): java.net.MalformedURLException: Protocol not found: 

blabla....

Protocol not found

Was könnte das bedeuten....

Ah! Ich hab's: Das Protocol wurde nicht gefunden. Also würde ich mal vor den Link ein

http(s)://

setzen.

Edit: Versuch mal alleine zu debuggen. Wie Pascal schon gesagt hat,

Log.d("Meine App", "url: " + url);

oder so.

— geändert am 15.11.2014, 12:09:03

Wenn dir mein Beitrag gefällt, kannst dich einfach mit dem 👍 "Danke"-Button auf der Website dieses Forums bedanken. 😀

Why Java? - Because I can't C#

Antworten