Picasso .into Funktion funktioniert nicht?
Code
Picasso.get().load(imageUrl).into(R.id.post_title);
Error:
error: no suitable method found for into(int)
Picasso.get().load(imageUrl).into(R.id.post_title);
^
method RequestCreator.into(Target) is not applicable
(argument mismatch; int cannot be converted to Target)
method RequestCreator.into(ImageView) is not applicable
(argument mismatch; int cannot be converted to ImageView)
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.
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);
}
}
}
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).
Hab es jetzt so versucht:
aber geht auch nicht