Picasso in ArrayAdapter

wer112

Top Contributor
Ich habe für ein kleines Nebenprojekt eine ListView mit einem Adapter erstellt. Er soll im Adapter die richtigen Bilder ersetzen.
Das würde ich gerne auch im App Store machen wollen, damit Produkt Bilder angezeigt wird im List View.

Die App bricht ab.
Kennt sich jemand im Apdater damit aus mit Picasso?

Habe das probiert:

Java:
Picasso.get().load(link[position]).into(image);
 

Jw456

Top Contributor
Mit welcher Fehlermeldung bricht es denn ab?
Was ist in dem Array link?
Ist da auch die url zu der Datei die angzeigt weden soll und hast du auch da die Rechte dazu die Datei zu lesen?
 

wer112

Top Contributor
Mit welcher Fehlermeldung bricht es denn ab?
Was ist in dem Array link?
Ist da auch die url zu der Datei die angzeigt weden soll und hast du auch da die Rechte dazu die Datei zu lesen?
Wenn ich den Link in load einzeln reinschreibe, dann geht er und setzt dann jedes Item dieses Bild.
Wenn ich den Link erst hole und den String reinsetze, dann geht er nicht, evtl. kann er nicht mehrfach hintereinander die Bilder setzen.

Fehlermeldung:

Code:
java.lang.IllegalArgumentException: Path must not be empty.
                                                                                                        at com.squareup.picasso.Picasso.load(Picasso.java:332)
                                                                                                        at com.Adapter.ListApdater.getView(ListApdater.java:69)
                                                                                                        at android.widget.AbsListView.obtainView(AbsListView.java:3219)
                                                                                                        at android.widget.ListView.makeAndAddView(ListView.java:2219)
                                                                                                        at android.widget.ListView.fillDown(ListView.java:827)
                                                                                                        at android.widget.ListView.fillFromTop(ListView.java:888)
                                                                                                        at android.widget.ListView.layoutChildren(ListView.java:1958)
                                                                                                        at android.widget.AbsListView.onLayout(AbsListView.java:2991)
                                                                                                        at android.view.View.layout(View.java:22419)
                                                                                                        at android.view.ViewGroup.layout(ViewGroup.java:6584)
                                                                                                        at android.widget.RelativeLayout.onLayout(RelativeLayout.java:1083)
                                                                                                        at android.view.View.layout(View.java:22419)
                                                                                                        at android.view.ViewGroup.layout(ViewGroup.java:6584)
                                                                                                        at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
                                                                                                        at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
                                                                                                        at android.view.View.layout(View.java:22419)
                                                                                                        at android.view.ViewGroup.layout(ViewGroup.java:6584)
                                                                                                        at android.widget.RelativeLayout.onLayout(RelativeLayout.java:1083)
                                                                                                        at android.view.View.layout(View.java:22419)
                                                                                                        at android.view.ViewGroup.layout(ViewGroup.java:6584)
                                                                                                        at androidx.drawerlayout.widget.DrawerLayout.onLayout(DrawerLayout.java:1263)
                                                                                                        at android.view.View.layout(View.java:22419)
                                                                                                        at android.view.ViewGroup.layout(ViewGroup.java:6584)
                                                                                                        at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
                                                                                                        at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
                                                                                                        at android.view.View.layout(View.java:22419)
                                                                                                        at android.view.ViewGroup.layout(ViewGroup.java:6584)
                                                                                                        at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1812)
                                                                                                        at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1656)
                                                                                                        at android.widget.LinearLayout.onLayout(LinearLayout.java:1565)
                                                                                                        at android.view.View.layout(View.java:22419)
                                                                                                        at android.view.ViewGroup.layout(ViewGroup.java:6584)
                                                                                                        at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
                                                                                                        at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
                                                                                                        at android.view.View.layout(View.java:22419)
                                                                                                        at android.view.ViewGroup.layout(ViewGroup.java:6584)
                                                                                                        at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1812)
                                                                                                        at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1656)
                                                                                                        at android.widget.LinearLayout.onLayout(LinearLayout.java:1565)
                                                                                                        at android.view.View.layout(View.java:22419)
                                                                                                        at android.view.ViewGroup.layout(ViewGroup.java:6584)
                                                                                                        at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
                                                                                                        at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
                                                                                                        at com.android.internal.policy.DecorView.onLayout(DecorView.java:1041)
                                                                                                        at android.view.View.layout(View.java:22419)
                                                                                                        at android.view.ViewGroup.layout(ViewGroup.java:6584)
                                                                                                        at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:3375)
                                                                                                        at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2839)
                                                                                                        at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1885)
                                                                                                        at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:8508)
                                                                                                        at android.view.Choreographer$CallbackRecord.run(Choreographer.java:949)
                                                                                                        at android.view.Choreographer.doCallbacks(Choreographer.java:761)
                                                                                                        at android.view.Choreographer.doFrame(Choreographer.java:696)
                                                                                                        at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:935)
                                                                                                        at android.os.Handler.handleCallback(Handler.java:873)
                                                                                                        at android.os.Handler.dispatchMessage(Handler.java:99)
                                                                                                        at android.os.Looper.loop(Looper.java:214)
                                                                                                        at android.app.ActivityThread.main(ActivityThread.java:7050)
                                                                                                        at java.lang.reflect.Method.invoke(Native Method)
                                                                                                        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:494)
                                                                                                        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:965)
 

Jw456

Top Contributor
Die Fehlermeldung sagt dir ja das der Path leer ist.

Deshalb auch die Frage was in dem Array ist, Datentyp. Ob du in deinen Adapter auch Zugriff darauf hast.
Dann teste im Debugger was du da bekommst. Ist das dann auch eine gültige url.
Ohne Code ist Hilfe schwierig.
 

wer112

Top Contributor
Die Fehlermeldung sagt dir ja das der Path leer ist.

Deshalb auch die Frage was in dem Array ist, Datentyp. Ob du in deinen Adapter auch Zugriff darauf hast.
Dann teste im Debugger was du da bekommst. Ist das dann auch eine gültige url.
Ohne Code ist Hilfe schwierig.
Ich bekomme einen Link habe das mit dem Log überprüft:

String LinkString = link[position];
Log.e("Link", LinkString);

Wenn ich den in load setzte, sowie ich ihn bekomme geht es auch. Aber ich kann die Position oder einen anderen LinkString nicht benutzen.
 

Marinek

Bekanntes Mitglied
Lieber @wer123,

Du schreibst so wenig Informationen, dass es faktisch unmöglich ist dir zu helfen.

Wir kennen deinen Quellcode nicht. Du postest zwei Zeilen. Ohne Zusammenhang und Bezug auf irgendein Adapter.

Deine Kenntnisse sind unzureichend. Du hast so schlechte Kenntnisse in der App Entwicklung, sodass du unsere Hilfe kaum verstehst.

Vor allem. Du änderst nix an deiner Fragestellung noch übernimmst du irgend ein Tipp, denn wir dir geben.

Damit machst du das einfach nur anstrengend für jeden.

Ich schlage vor das signifikant zu verbessern.

Sonst können wir nur darauf verweisen in deinem Team deine Entwickler zu fragen. Und die Thread hier werden geschlossen.

Mega frustrierend.
 

wer112

Top Contributor
Lieber @wer123,

Du schreibst so wenig Informationen, dass es faktisch unmöglich ist dir zu helfen.

Wir kennen deinen Quellcode nicht. Du postest zwei Zeilen. Ohne Zusammenhang und Bezug auf irgendein Adapter.
Dachte man kennt denn Grund Aufbau eines Array Adapters.

Hier der Adapter:

Java:
package .Adapter;

import android.app.Activity;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.TextView;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;

import com.andrealfredklug.ketorezepte.R;
import com.squareup.picasso.Picasso;

public class ListApdater extends ArrayAdapter<String> {


    private final Activity context;
    private final String[] id;
    private final String[] name;
    private final String[] link;
    private final String[] carbs;
    private final String[] protein;
    private final String[] fett;
    private final String[] kcal;
    private final String[] time;

    public ListApdater(Activity context, String[] id, String[] name, String[] link, String[] carbs, String[] protein, String[] fett, String[] kcal, String[] time){
        super(context, R.layout.list_view, id);

        this.context = context;
        this.id = id;
        this.name = name;
        this.link = link;
        this.carbs = carbs;
        this.protein = protein;
        this.fett = fett;
        this.kcal = kcal;
        this.time = time;
    }

    @NonNull
    @Override
    public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {

        LayoutInflater inflater = context.getLayoutInflater();
        View rowView = inflater.inflate(R.layout.list_view, null, true);

        ImageView image = (ImageView) rowView.findViewById(R.id.list_imageView);
        TextView nameText = (TextView)rowView.findViewById(R.id.list_name_textView);
        TextView carbsText = (TextView) rowView.findViewById(R.id.list_kh_textView);
        TextView proteinText = (TextView)rowView.findViewById(R.id.list_protein_textView);
        TextView fettText = (TextView)rowView.findViewById(R.id.list_fett_textView);
        TextView kcalText  = (TextView)rowView.findViewById(R.id.list_kcal_textView);



        nameText.setText(name[position]);
        carbsText.setText(rowView.getResources().getString(R.string.kh) + ": " + carbs[position] + "g");
        proteinText.setText(rowView.getResources().getString(R.string.protein) + ": " + protein[position] + "g");
        fettText.setText(rowView.getResources().getString(R.string.fett) + ": " + fett[position] + "g");
        kcalText.setText(rowView.getResources().getString(R.string.kcal) + ": " + kcal[position]);

        String LinkString = link[position];
        Log.e("Link", LinkString);
        Picasso.get().load(link[position]).into(image);

        return rowView;
    }
}
 

LimDul

Top Contributor
Meine Vermutung ist dein Log sieht so aus:

Code:
Pfad zu Image
Pfad zu Image

Exception
Und dann ist klar, dass es nicht klappt - denn die Leerzeile sagt dann, dass da ein Pfad leer ist. Bei sowas immer entweder debuggen oder im Log Kontext ausgeben (z.B. die auch die position)
 

wer112

Top Contributor
Der relevante Teil fehlt: Log.e("Link", LinkString); - was steht in LinkString drin bevor die Exception fliegt?
Dank dir, weiß ich nun, was das Problem sein könnte. Ich habe 2 Einträge in der DB und nur ein Bilder Link im zweiten ist der Leer. Evtl. ruft er einen leeren String auf.

Was kann ich machen, wenn in der Position ein leerer String ist? Eine If Abfrage und wenn es nicht "" ist, dann das mit Picasso?
 

Neue Themen


Oben