AsyncTask in einer Widget (AppWidgetProvider) setzen.

  • Antworten:0
Michele
  • Forum-Beiträge: 1.525

05.04.2013, 21:47:42 via Website

Hallo alle zusammen.

Bin nun fast fertig mit meinem Wunsch *grins*
Konnte mich nun auch etwas mit AsyncTask anfreunden.

Meine frage. Ich wollte aus dem Internet vom WebSpace/FTP Server was auslesen und in der TextView einsetzen.
Z.B eine Text.txt Datei. Dazu brauche ich AsyncTask. Funktioniert auch alles Super.

Nun möchte ich das aber in eine Widget packen.
Heißt das Widget vorne auf dem Display den Text anzeigt den ich auslese und einsetze aus der Text.txt Datei aus dem Internet.

Hier mal mein Code:

Die MainActivity mit der AsyncTask:

1public class MainActivity extends Activity {
2
3 public TextView tv;
4 public String str;
5 public String inputLine;
6 public StringBuilder text;
7 public BufferedReader in;
8 public URL url;
9
10 @Override
11 protected void onCreate(Bundle savedInstanceState) {
12 super.onCreate(savedInstanceState);
13 setContentView(R.layout.activity_main);
14
15 tv = (TextView) findViewById(R.id.textView1);
16 new DownloadTask().execute();
17
18 }
19
20 private class DownloadTask extends AsyncTask<String, Void, String> {
21
22 @Override
23 protected String doInBackground(String... arg0) {
24
25 try {
26 url = new URL("http://shellsapple.funpic.de/test.txt");
27 in = new BufferedReader(new InputStreamReader(url.openStream()));
28 inputLine = null;
29 text = new StringBuilder();
30 while ((inputLine = in.readLine()) != null) {
31 str = in.readLine();
32 text.append(inputLine);
33 text.append('\n');
34 }
35 in.close();
36 } catch (MalformedURLException e) {
37
38 e.printStackTrace();
39 } catch (IOException e) {
40
41 e.printStackTrace();
42 }
43 return null;
44 }
45
46 @Override
47 protected void onPostExecute(String result) {
48
49 tv.setText(text);
50 tv.setTextColor(Color.BLACK);
51 }
52 }
53}

Hier lese in aus meiner Text Datei das geschriebene aus und übergebe es an den TextView. Klappt wie gesagt alles Super und wir im
Layout/TextView angezeigt

Aber nun möchte ich das es vorne auf dem Display also in meiner Widget angezeigt wird.

Hier die AppWidgetProvider..Keine Ahnung warum die nicht richtig angezeigt wird hier im Forum.

[code]
public class AppWidget extends AppWidgetProvider {


@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager,
int[] appWidgetIds) {

final int N = appWidgetIds.length;

for (int i = 0; i < N; i++) {
int appWidgetId = appWidgetIds[i];

Intent intent = new Intent(context, AppWidget.class);
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0,intent, 0);
RemoteViews views = new RemoteViews(context.getPackageName(),R.layout.activity_main);
views.setTextViewText(R.id.textView1, "Test");
views.setTextColor(R.id.textView1, Color.BLACK);
views.setOnClickPendingIntent(R.id.button1, pendingIntent);

appWidgetManager.updateAppWidget(appWidgetId, views);
}
super.onUpdate(context, appWidgetManager, appWidgetIds);
}
}
[/code]

Habe schon einiges versucht.Z.B Die AsyncTask in die class hier rein zu setzen aber es stürzt immer meine APK dann ab.

Wie setze ich das nun richtig um oder ein?


LG

— geändert am 05.04.2013, 21:53:36

Antworten