
Tatmotiv
Ambitioniertes Mitglied
- 6
Hi,
ich bekomme mein Gehirn einfach nicht so gewickelt, das ich mit Java klar komme. Darum würde ich mir sehr über Hilfe freuen.
Ich hab eine Activity (die ist für die Frage aber egal) und ein Homescreen widget in dem ich beim drauf klicken daten aus dem Netz laden will (eine klassische WetterApp
).
Ich habe soweit mit intents und pending intents rumgefummelt das bei onClick eine random Zahl in widget gezaubert wird und auch das reine downloaden der Daten ist mittels HttpURLConnection auch gelöst. Aber die beiden Funktionen zu verheiraten klappt nicht.
Hier meine myWidget.java:
Und das ganze funktioniert auch, jedesmal, wenn die App aus AndroidStudio gestartet wird oder das Widget neu auf dem Homescreen erzeugt wird, erscheinen eine neue random Nummer und die heruntergeladenen Daten im Widget.
Aber beim klick auf das widget erscheint keine neue random nummer und es werden auch keine neuen Daten downgeloaded. Ist der Teil mit try { downloadTask()... nicht mit drin, wird bei jedem click auf das widget wieder nur eine neue RandomNummer angezeigt, aber warum das mit dem download zusammen nicht klappt, verstehe ich nicht.
Eure Hilfe wäre toll.
Danke und Gruß
tm
ich bekomme mein Gehirn einfach nicht so gewickelt, das ich mit Java klar komme. Darum würde ich mir sehr über Hilfe freuen.
Ich hab eine Activity (die ist für die Frage aber egal) und ein Homescreen widget in dem ich beim drauf klicken daten aus dem Netz laden will (eine klassische WetterApp
Ich habe soweit mit intents und pending intents rumgefummelt das bei onClick eine random Zahl in widget gezaubert wird und auch das reine downloaden der Daten ist mittels HttpURLConnection auch gelöst. Aber die beiden Funktionen zu verheiraten klappt nicht.
Code:
/*
* Implementation of App Widget functionality.
*/
public class RawDataWidget extends AppWidgetProvider {
static AppWidgetManager globalAppWidgetManager;
static void updateAppWidget(Context context, AppWidgetManager appWidgetManager, int appWidgetId)
{
}
@override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
// There may be multiple widgets active, so update all of them
for (int appWidgetId : appWidgetIds) {
// Get the layout for the App Widget
RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.raw_data_widget);
// start data download
try {
String data = new downloadTask().execute("<domain die daten liefert>").get();
}
catch (ExecutionException | InterruptedException ei) {
ei.printStackTrace();
}
// Update the widget text
String number = String.format("%03d", (new Random().nextInt(900) + 100)) + "\n";
views.setTextViewText(R.id.raw_widget_text, number + data);
// Creating a pending intent, which will be invoked when the user clicks on the widget
Intent refreshIntent = new Intent(context, RawDataWidget.class);
refreshIntent.setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE);
refreshIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, appWidgetIds);
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, refreshIntent, PendingIntent.FLAG_UPDATE_CURRENT);
views.setOnClickPendingIntent(R.id.raw_widget_frame, pendingIntent);
// Instruct the widget manager to update the widget
appWidgetManager.updateAppWidget(appWidgetId, views);
}
}
private static class downloadTask extends AsyncTask<String, String, String> {
protected void onPreExecute() {
super.onPreExecute();
}
protected String doInBackground(String... params) {
HttpURLConnection connection = null;
BufferedReader reader = null;
try {
URL url = new URL(params[0]);
connection = (HttpURLConnection) url.openConnection();
connection.connect();
InputStream stream = connection.getInputStream();
reader = new BufferedReader(new InputStreamReader(stream));
StringBuffer buffer = new StringBuffer();
String line = "";
while ((line = reader.readLine()) != null) {
buffer.append(line+"\n");
}
return buffer.toString();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (connection != null) {
connection.disconnect();
}
try {
if (reader != null) {
reader.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
return null;
}
@override
protected void onPostExecute(String result) {
super.onPostExecute(result);
}
}
}
Hier meine myWidget.java:
Aber beim klick auf das widget erscheint keine neue random nummer und es werden auch keine neuen Daten downgeloaded. Ist der Teil mit try { downloadTask()... nicht mit drin, wird bei jedem click auf das widget wieder nur eine neue RandomNummer angezeigt, aber warum das mit dem download zusammen nicht klappt, verstehe ich nicht.
Eure Hilfe wäre toll.
Danke und Gruß
tm
Zuletzt bearbeitet: