Picasso .into Funktion funktioniert nicht?

1 Antwort

Die Fehlermeldung verrät die Fehlerursache bereits. Die Methode erwartet ein ImageView-Objekt. Du übergibst ihr jedoch nur eine ID.

Hol dir erst die View (bspw. via findViewById). Das Objekt kannst du dann als Argument weitergeben.

Sebioderso 
Fragesteller
 16.04.2023, 17:38

Hab es jetzt so versucht:

Picasso.get().load(imageUrl).into(views.findViewById(R.id.post_title));

aber geht auch nicht

0
Sebioderso 
Fragesteller
 16.04.2023, 17:39
@Sebioderso

Hier ist der gesamte Code:

@SuppressLint("StaticFieldLeak")
 private void updateWidget(Context context, RemoteViews views) {
    // Fetch the latest post from the API
    String apiUrl = "https://www.visualink-art.eu/apis/GetLastestPost";
    new AsyncTask<Void, Void, JSONObject>() {
        @Override
        protected JSONObject doInBackground(Void... params) {
            try {
                HttpURLConnection connection = (HttpURLConnection) new URL(apiUrl).openConnection();
                connection.setRequestMethod("GET");
                connection.setRequestProperty("Content-Type", "application/json");
                connection.connect();
                InputStream inputStream = connection.getInputStream();
                StringBuilder responseBuilder = new StringBuilder();
                byte[] buffer = new byte[1024];
                int length;
                while ((length = inputStream.read(buffer)) != -1) {
                    responseBuilder.append(new String(buffer, 0, length));
                }
                inputStream.close();
                return new JSONObject(responseBuilder.toString());
            } catch (IOException | JSONException e) {
                Log.e(TAG, "Failed to fetch latest post from API", e);
            }
            return null;
        }

        @Override
        protected void onPostExecute(JSONObject response) {
            if (response != null) {
                try {
                    // Get the latest post data from the API response
                    JSONObject latestPost = response;
                    String title = latestPost.getString("Title");
                    String content = latestPost.getString("Content");
                    String imageUrl = latestPost.getString("Image");
                    String time = latestPost.getString("PostedAt");
                    String postUrl = "https://www.visualink-art.eu/_/ViewPost?PostId=" + latestPost.getString("PostId");

                    // Load the post image into the widget
                    Picasso.get().load(imageUrl).into(views.findViewById(R.id.post_title));
                    // Set the post title, content, and time
                    views.setTextViewText(R.id.post_title, title);
                    views.setTextViewText(R.id.post_content, content);
                    views.setTextViewText(R.id.post_time, time);

                    // Add a click listener to open the post in a browser when the widget is clicked
                    Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(postUrl));
                    PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, browserIntent, 0);
                    views.setOnClickPendingIntent(R.id.post_image, pendingIntent);

                    // Add a click listener to refresh the widget when the refresh button is clicked
                    Intent refreshIntent = new Intent(context, LatestPostWidget.class);
                    refreshIntent.setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE);
                    PendingIntent refreshPendingIntent = PendingIntent.getBroadcast(context, 0, refreshIntent, 0);
                    views.setOnClickPendingIntent(R.id.refresh_button, refreshPendingIntent);
                } catch (JSONException e) {
                    Log.e(TAG, "Failed to update widget", e);
                } catch (MalformedURLException e) {
                    throw new RuntimeException(e);
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
            }
        }
0
regex9  16.04.2023, 19:10
@Sebioderso
aber geht auch nicht

Kannst du mit so einer Fehlerbeschreibung etwas anfangen? 🤨 Ich jedenfalls nicht.

Wenn du auf ein Problem stößt, solltest du erst einmal versuchen, es so genau wie möglich zu beschreiben. Man könnte beispielsweise

  • unterscheiden, ob es zur Entwicklungs- oder erst zur Programmlaufzeit auftritt
  • schauen, inwiefern es vom gewünschten Verhalten/Ziel (was man natürlich ebenso kennen muss) abweicht
  • nach Rückmeldungen vom Compiler/Programm suchen und diese lesen/analysieren

Solche Analysen sind nicht schwer und helfen erheblich bei der Eingrenzung des Problems.

Was mir konkret auffällt, ist, dass views vom Typ RemoteViews ist. Da wäre die erste Frage, ob der die findViewById-Methode überhaupt kennt. Gleiche das entweder mit der API-Referenz ab oder dem Compiler-Feedback/den Rückmeldungen deiner IDE (Android Studio beispielsweise sollte das deutlich anzeigen). Seitens Picasso gibt es weitere Überladungen der into-Methode (siehe Referenz).

0