Probleme mit Facebook SDK

  • Antworten:37
  • OffenNicht stickyNicht beantwortet
  • Forum-Beiträge: 71

28.02.2014, 15:42:32 via Website

Hallo Leute, ich hab ein bzw. eigentlich gleich 2 Probleme,
Erstmal zur kurzen Erklärung: ich bin grade dabei, Facebook in mein App einzubauen, man soll nämlich seinen Highscore letztendlich dann über das App auf die Pinnwand posten können. Aber soweit bin ich (leider) noch gar nicht. Ich bin jetzt eigentlich grade dabei, Benutzerdaten auszulesen und dann einen Text mit: Welcome xxx.xxx auszugeben (xxx steht für name) und das profilbild anzuzeigen.. Allerdings wird gar nichts angezeigt. Was komisch ist: ich habe noch eine weitere TextView um den Highscore auszugeben, und habe die mal zum Testen missbraucht und habe einfach versucht, einen beliebigen Text auszugeben, zum einen, in dem Teil des Programms, wo man sich einloggt, hat funktioniert. Aber als ich es dann in der Funktion versucht habe, wo der Login Button nach dem Login dann zum Logout button wird und eine Funktion zur Datenerfassung aufgerufen wird, ging es plötzlich nicht mehr. Warum auch immer (ich werde es nachher im Quelltext markieren, was ich mein). Was aber komisch ist(!!): Die Daten werden prinzipiell auf jeden Fall erfasst, denn ich habe mal in Logcat nachgeschaut, und da wurden mir bei einem Eintrag sämtliche Daten wie Name, Email, ID usw. angezeigt, allerdings habe ich dann versucht, genau zwischendrin (wo auch die Daten erfasst werden) auch einfach mal auf dieser Highscore-TextView etwas auszugeben, und siehe da: GAR NICHTS.... Das war also Problem Nr.1 ich hoff mir kann jemand helfen.

Zu Problem Nummer 2: der Logout....
Einloggen funktioniert problemlos (bis auf das obige Problem) aber sobald ich dann auf Logout drücke, stürzt die App ab. Ich habe schon unzählige Möglichkeiten versucht, wie:
1Session session = Session.getActiveSession();
2 if (!session.isClosed()) {
3 session.closeAndClearTokenInformation();
4 }
oder
1fb.logout(ScoreActivity.this)
oder auch schonn mit dem AsyncFacebookRunner.logout und diverse andere Möglichkeit (mit Acitvity name, ohne Name und was weiß ich was alles) und ich weiß mir einfach nicht mehr zu helfen... Info am Rande: ich benutze die Facebook Android SDK 3.7
Ich bin echt langsam am verzweifeln und weiß nicht mehr was ich noch alles ausprobieren soll...
Hier also noch mein Quelltext (ich hoffe man findet sich halbwegs zurecht, hab ein paar Funktionen ausgelassen, die jetzt unwesentlich sind)

1public class ScoreActivity extends Activity implements OnClickListener {
2 TextView anzeigen;
3
4 ImageView pic, button;
5 Facebook fb;
6 TextView welcome;
7 Session session;
8
9 JSONObject obj = null;
10 URL img_url = null;
11
12 public static AsyncFacebookRunner mAsyncRunner = null;
13
14 SharedPreferences sp;
15
16 @Override
17 protected void onCreate(Bundle savedInstanceState) {
18 requestWindowFeature(Window.FEATURE_NO_TITLE);
19 super.onCreate(savedInstanceState);
20 setContentView(R.layout.score);
21
22 String APP_ID = getString(R.string.app_id);
23 fb = new Facebook(APP_ID);
24
25 mAsyncRunner = new AsyncFacebookRunner(fb);
26
27 welcome = (TextView) findViewById(R.id.welcome);
28
29 sp = getPreferences(MODE_PRIVATE);
30 String access_token = sp.getString("access_token", null);
31 long expires = sp.getLong("access_expires", 0);
32
33 if (access_token != null) {
34 fb.setAccessToken(access_token);
35 }
36 if (expires != 0) {
37 fb.setAccessExpires(expires);
38 }
39
40 button = (ImageView) findViewById(R.id.login);
41 pic = (ImageView) findViewById(R.id.picture_pic);
42 button.setOnClickListener(this);
43 updateButtonImage();
44 init(); // (unwichtig)
45
46
47 }
48
49 private void updateButtonImage() {
50 // TODO Auto-generated method stub
51 if (fb.isSessionValid()) { //wenn eingeloggt
52 button.setImageResource(R.drawable.logout_button);
53 pic.setVisibility(ImageView.VISIBLE);
54 getProfileInformation();
55
56 } else { //wenn ausgeloggt
57 button.setImageResource(R.drawable.login_button);
58 pic.setVisibility(ImageView.INVISIBLE);
59 }
60 }
61
62 public void getProfileInformation() {
63
64 //wenn ich hier den Text der TextView in einen beliebigen Text ändere funktioniert es komischerweise nicht, obwohl die Aktionen darunter denke ich eigentlich ausgeführt werden
65
66 mAsyncRunner.request("me", new RequestListener() {
67 public void onComplete(String response, Object state) {
68 Log.d("Profile", response);
69 String json = response;
70 try {
71 JSONObject profile = new JSONObject(json);
72 // getting name of the user
73 final String name = profile.getString("name");
74 // getting email of the user
75 final String email = profile.getString("email");
76 // getting email of the user
77 final String id = profile.getString("id");
78
79 img_url=new URL("http://graph.facebook.com/"+id+"/pictrue=type=normal");
80 Bitmap bmp = BitmapFactory.decodeStream(img_url.openConnection().getInputStream());
81 pic.setImageBitmap(bmp);
82 welcome.setText("Welcome " + name);
83
84
85
86 } catch (JSONException e) {
87 e.printStackTrace();
88
89 } catch (MalformedURLException e) {
90 // TODO Auto-generated catch block
91 e.printStackTrace();
92
93 } catch (IOException e) {
94 // TODO Auto-generated catch block
95 e.printStackTrace();
96 }
97 }
98
99 public void onIOException(IOException e, Object state) {
100 }
101
102 public void onFileNotFoundException(FileNotFoundException e,
103 Object state) {
104 }
105
106 public void onMalformedURLException(MalformedURLException e,
107 Object state) {
108 }
109
110 public void onFacebookError(FacebookError e, Object state) {
111 }
112 });
113
114 }
115@Override
116 public void onClick(View v) {
117 if (fb.isSessionValid()) {
118 Session session = Session.getActiveSession(); //hier soll der Logout-Vorgang passieren
119 if (!session.isClosed()) {
120 session.closeAndClearTokenInformation();
121 }
122 updateButtonImage();
123 } else {
124 // login to facebook --> funktioniert
125 fb.authorize(ScoreActivity.this, new String[] { "email" },
126 new DialogListener() {
127 @Override
128 public void onFacebookError(FacebookError e) {
129 // TODO Auto-generated method stub
130 Toast.makeText(ScoreActivity.this, "fbError",
131 Toast.LENGTH_SHORT).show();
132 }
133
134 @Override
135 public void onError(DialogError e) {
136 // TODO Auto-generated method stub
137 Toast.makeText(ScoreActivity.this, "onError",
138 Toast.LENGTH_SHORT).show();
139 }
140
141 @Override
142 public void onComplete(Bundle values) {
143 // TODO Auto-generated method stub
144 Editor editor = sp.edit();
145 editor.putString("access_token",
146 fb.getAccessToken());
147 editor.putLong("access_expires",
148 fb.getAccessExpires());
149 editor.commit();
150 updateButtonImage();
151
152 //wenn ich hier den Text der Highscore-TextView (hier: anzeigen) ändere funktioniert es!
153 }
154
155 @Override
156 public void onCancel() {
157 // TODO Auto-generated method stub
158 Toast.makeText(ScoreActivity.this, "onCancel",
159 Toast.LENGTH_SHORT).show();
160 }
161 });
162
163 }
164 }
165
166 @Override
167 protected void onActivityResult(int requestCode, int resultCode, Intent data) {
168 // TODO Auto-generated method stub
169 super.onActivityResult(requestCode, resultCode, data);
170 fb.authorizeCallback(requestCode, resultCode, data);
171 }
172}



Also wie gesagt, über schnelle Hilfe wäre ich echt dankbar!!

Mit freundlichen Grüßen
Florian S.



Ps: hier auch noch die Logcat-Ausgabe von der ich zumindest schwer davon ausgehe, dass da der Inhalt der Funktion getProfileinformation() ausgeführt wird (leider kenn ich mich mit Logcat gar nicht aus... (Namen und Ids durch sterne ersetzt)

02-28 15:39:22.423: D/Profile(26091): {"id":"1000*******","name":"Florian S********","first_name":"Florian","last_name":"S*******","link":"https:\/\/www.facebook.com\/florian.s********","gender":"male","email":"frab*********eb.de","timezone":1,"locale":"de_DE","verified":true,"updated_time":"2013-10-05T06:18:11+0000","username":"florian.s********"}

Antworten
  • Forum-Beiträge: 71

01.03.2014, 08:12:52 via App

Hab ich jetzt mit meinem halben Roman alle erschlagen? Weiß keiner worans liegt?

Antworten
Klaus
  • Blogger
  • Forum-Beiträge: 19.167

01.03.2014, 08:34:09 via App

Hallo!

Bitte nicht pushen, gib doch der Community ein wenig Zeit!

Wenn sich jemand findet, der eine Antwort zu deiner Frage weiß, dann wird er/sie es bestimmt hier posten, also hab noch ein wenig Geduld... :wacko:

| LG Klaus |
| Google Nexus 6P - Dirty Unicorns | Google Nexus 6 - Dirty Unicorns |
| Das AndroidPITiden-Buch | Die Androiden-Toolbox | AndroidPIT-Regeln |

Antworten
Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 10.173

01.03.2014, 08:42:09 via Website

Dein LogCat zeigt zwar die Login Daten an aber kein konkreten Fehler oder eine Exception.
Bitte nochmal überprüfen (Rote Texte sind immer Errors etc.) und ggf posten

— geändert am 01.03.2014, 08:42:20

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
  • Forum-Beiträge: 71

02.03.2014, 10:14:37 via Website

Also, Logcat zeigt beim Klick auf Logout jetzt folgendes an (bei den Errors):
03-02 10:06:56.010: E/AudioPolicyService(1849): getOutput() tid 4136 --
03-02 10:06:56.550: E/SpannableStringBuilder(21637): SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length
03-02 10:06:56.550: E/SpannableStringBuilder(21637): SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length
03-02 10:06:59.520: E/Watchdog(7266): !@Sync 16593
03-02 10:07:02.095: E/dalvikvm(21753): Could not find class 'android.telephony.CellInfoCdma', referenced from method com.facebook.common.hardware.CellDiagnosticsSerializer.c
03-02 10:07:03.710: E/SpannableStringBuilder(21637): SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length
03-02 10:07:03.710: E/SpannableStringBuilder(21637): SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length
03-02 10:07:04.450: E/dalvikvm(29171): Could not find class 'android.app.AppOpsManager', referenced from method bln.a
03-02 10:07:04.735: E/AndroidRuntime(21637): FATAL EXCEPTION: Thread-40029
03-02 10:07:04.735: E/AndroidRuntime(21637): java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
03-02 10:07:04.735: E/AndroidRuntime(21637): at android.os.Handler.<init>(Handler.java:121)
03-02 10:07:04.735: E/AndroidRuntime(21637): at android.widget.Toast$TN.<init>(Toast.java:361)
03-02 10:07:04.735: E/AndroidRuntime(21637): at android.widget.Toast.<init>(Toast.java:97)
03-02 10:07:04.735: E/AndroidRuntime(21637): at android.widget.Toast.makeText(Toast.java:254)
03-02 10:07:04.735: E/AndroidRuntime(21637): at de.ftProductions.volcanoJump.ScoreActivity$1.onComplete(ScoreActivity.java:135)
03-02 10:07:04.735: E/AndroidRuntime(21637): at com.facebook.android.AsyncFacebookRunner$2.run(AsyncFacebookRunner.java:276)
03-02 10:07:05.095: E/android.os.Debug(7266): !@Dumpstate > dumpstate -k -t -z -d -o /data/log/dumpstate_app_error
03-02 10:07:17.870: E/WifiHW(7266): ##################### set firmware type 0 #####################
03-02 10:07:17.955: E/ClockAlarmWidget(19060): [AlarmWidgetIdManager] getListItem() : itemIndex=0, widgetID:1
03-02 10:07:17.960: E/ClockAlarmWidget(19060): [AlarmWidgetIdManager] getListItem() : ItemIndex exceed ListItemCount. itemIndex=1
03-02 10:07:17.960: E/ClockAlarmWidget(19060): [AlarmWidgetIdManager] getListItem() : itemIndex=1, widgetID:1
03-02 10:07:20.135: E/ObjectHelper(21886): Can't find method:setCompatibilityInfo
03-02 10:07:20.950: E/ActivityThread(21872): Failed to find provider info for com.seven.provider.email
03-02 10:07:22.655: E/MtpService(21005): In MTPAPP onReceive:android.intent.action.BATTERY_CHANGED
03-02 10:07:22.655: E/MtpService(21005): battPlugged Type : 2
03-02 10:07:22.930: E/WifiHW(7266): ##################### set firmware type 0 #####################
03-02 10:07:29.525: E/Watchdog(7266): !@Sync 16594
03-02 10:07:29.965: E/SensorManager(27707): thread start
03-02 10:07:30.560: E/ClockAlarmWidget(19060): [AlarmWidgetIdManager] getListItem() : itemIndex=0, widgetID:1
03-02 10:07:30.565: E/ClockAlarmWidget(19060): [AlarmWidgetIdManager] getListItem() : ItemIndex exceed ListItemCount. itemIndex=1
03-02 10:07:30.565: E/ClockAlarmWidget(19060): [AlarmWidgetIdManager] getListItem() : itemIndex=1, widgetID:1
03-02 10:07:59.525: E/Watchdog(7266): !@Sync 16595
03-02 10:08:00.060: E/ClockAlarmWidget(19060): [AlarmWidgetIdManager] getListItem() : itemIndex=0, widgetID:1
03-02 10:08:00.060: E/ClockAlarmWidget(19060): [AlarmWidgetIdManager] getListItem() : ItemIndex exceed ListItemCount. itemIndex=1
03-02 10:08:00.060: E/ClockAlarmWidget(19060): [AlarmWidgetIdManager] getListItem() : itemIndex=1, widgetID:1
03-02 10:08:02.750: E/MtpService(21005): In MTPAPP onReceive:android.intent.action.BATTERY_CHANGED
03-02 10:08:02.750: E/MtpService(21005): battPlugged Type : 2
03-02 10:08:17.965: E/WifiHW(7266): ##################### set firmware type 0 #####################
03-02 10:08:22.555: E/WifiHW(7266): ##################### set firmware type 0 #####################
03-02 10:08:29.525: E/Watchdog(7266): !@Sync 16596
03-02 10:08:42.845: E/MtpService(21005): In MTPAPP onReceive:android.intent.action.BATTERY_CHANGED
03-02 10:08:42.845: E/MtpService(21005): battPlugged Type : 2
03-02 10:08:59.530: E/Watchdog(7266): !@Sync 16597
03-02 10:09:00.060: E/ClockAlarmWidget(19060): [AlarmWidgetIdManager] getListItem() : itemIndex=0, widgetID:1
03-02 10:09:00.060: E/ClockAlarmWidget(19060): [AlarmWidgetIdManager] getListItem() : ItemIndex exceed ListItemCount. itemIndex=1
03-02 10:09:00.060: E/ClockAlarmWidget(19060): [AlarmWidgetIdManager] getListItem() : itemIndex=1, widgetID:1


Ich habe jetzt bei den Catch blöcken nichts in Log geschrieben, sondern einfach ne Toast-Message gemacht (kam aber keine am Handy..)

1public void getProfileInformation() {
2
3 mAsyncRunner.request("me", new RequestListener() {
4 public void onComplete(String response, Object state) {
5 Log.d("Profile", response);
6 String json = response;
7 try {
8 JSONObject profile = new JSONObject(json);
9 // getting name of the user
10 final String name = profile.getString("name");
11 // getting email of the user
12 final String email = profile.getString("email");
13 // getting email of the user
14 final String id = profile.getString("id");
15
16 img_url=new URL("http://graph.facebook.com/"+id+"/pictrue=type=normal");
17 Bitmap bmp = BitmapFactory.decodeStream(img_url.openConnection().getInputStream());
18 pic.setImageBitmap(bmp);
19 welcome.setText("Welcome " + name);
20
21
22
23 } catch (JSONException e) {
24 e.printStackTrace();
25 Toast.makeText(ScoreActivity.this, "JsonFehler",
26 Toast.LENGTH_SHORT).show();
27
28 } catch (MalformedURLException e) {
29 // TODO Auto-generated catch block
30 e.printStackTrace();
31 Toast.makeText(ScoreActivity.this, "urlError",
32 Toast.LENGTH_SHORT).show();
33
34 } catch (IOException e) {
35 // TODO Auto-generated catch block
36 Toast.makeText(ScoreActivity.this, "ioerror",
37 Toast.LENGTH_SHORT).show();
38 e.printStackTrace();
39 }
40 }
41
42 public void onIOException(IOException e, Object state) {
43 Toast.makeText(ScoreActivity.this, "onioError",
44 Toast.LENGTH_SHORT).show();
45 }
46
47 public void onFileNotFoundException(FileNotFoundException e,
48 Object state) {
49 Toast.makeText(ScoreActivity.this, "filenotfoundError",
50 Toast.LENGTH_SHORT).show();
51 }
52
53 public void onMalformedURLException(MalformedURLException e,
54 Object state) {
55 Toast.makeText(ScoreActivity.this, "onurlError",
56 Toast.LENGTH_SHORT).show();
57 }
58
59 public void onFacebookError(FacebookError e, Object state) {
60 Toast.makeText(ScoreActivity.this, "fbError",
61 Toast.LENGTH_SHORT).show();
62 }
63 });
64
65 }

hier jetzt noch die Logcat Ausgabe bei dem Login (wo die Daten ausgegeben werden sollen:

03-02 10:12:00.165: E/ClockAlarmWidget(19060): [AlarmWidgetIdManager] getListItem() : itemIndex=1, widgetID:1
03-02 10:12:03.740: E/MtpService(21005): In MTPAPP onReceive:android.intent.action.BATTERY_CHANGED
03-02 10:12:03.740: E/MtpService(21005): battPlugged Type : 2
03-02 10:12:04.780: E/AndroidRuntime(22551): FATAL EXCEPTION: Thread-40114
03-02 10:12:04.780: E/AndroidRuntime(22551): java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
03-02 10:12:04.780: E/AndroidRuntime(22551): at android.os.Handler.<init>(Handler.java:121)
03-02 10:12:04.780: E/AndroidRuntime(22551): at android.widget.Toast$TN.<init>(Toast.java:361)
03-02 10:12:04.780: E/AndroidRuntime(22551): at android.widget.Toast.<init>(Toast.java:97)
03-02 10:12:04.780: E/AndroidRuntime(22551): at android.widget.Toast.makeText(Toast.java:254)
03-02 10:12:04.780: E/AndroidRuntime(22551): at de.ftProductions.volcanoJump.ScoreActivity$1.onComplete(ScoreActivity.java:135)
03-02 10:12:04.780: E/AndroidRuntime(22551): at com.facebook.android.AsyncFacebookRunner$2.run(AsyncFacebookRunner.java:276)
03-02 10:12:04.805: E/android.os.Debug(7266): !@Dumpstate > dumpstate -k -t -z -d -o /data/log/dumpstate_app_error
03-02 10:12:16.085: E/JavaBinder(7266): !!! FAILED BINDER TRANSACTION !!!
03-02 10:12:16.140: E/InputDispatcher(7266): channel ~ Channel is unrecoverably broken and will be disposed!
03-02 10:12:16.145: E/InputDispatcher(7266): Received spurious receive callback for unknown input channel. fd=127, events=0x9
03-02 10:12:16.525: E/ClockAlarmWidget(19060): [AlarmWidgetIdManager] getListItem() : itemIndex=0, widgetID:1
03-02 10:12:16.525: E/ClockAlarmWidget(19060): [AlarmWidgetIdManager] getListItem() : ItemIndex exceed ListItemCount. itemIndex=1
03-02 10:12:16.525: E/ClockAlarmWidget(19060): [AlarmWidgetIdManager] getListItem() : itemIndex=1, widgetID:1
03-02 10:12:18.160: E/WifiHW(7266): ##################### set firmware type 0 #####################
03-02 10:12:19.110: E/JavaBinder(7266): !!! FAILED BINDER TRANSACTION !!!
03-02 10:12:19.120: E/JavaBinder(7266): !!! FAILED BINDER TRANSACTION !!!
03-02 10:12:19.120: E/JavaBinder(7474): !!! FAILED BINDER TRANSACTION !!!
03-02 10:12:22.745: E/WifiHW(7266): ##################### set firmware type 0 #####################
03-02 10:12:29.540: E/Watchdog(7266): !@Sync 16604

Ich hoffe ihr könnt mir helfen.

Danke schonmal.

Gruß
Florian S.

Antworten
Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 10.173

02.03.2014, 10:16:50 via Website

1java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
203-02 10:12:04.780: E/AndroidRuntime(22551): at de.ftProductions.volcanoJump.ScoreActivity$1.onComplete(ScoreActivity.java:135)
303-02 10:07:04.735: E/AndroidRuntime(21637): at com.facebook.android.AsyncFacebookRunner$2.run(AsyncFacebookRunner.java:276)
Was steht denn in ScoreActivity.java:135?

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
  • Forum-Beiträge: 1.793

02.03.2014, 10:21:44 via App

Bitte demnächst nur das vom LogCat posten, was rot ist (=Fehler).

Scheinbar kommen die Callbacks vom Facebook-SDK nicht auf dem UI-Thread an? Die Toast-Message (alles was mit Views/Benutzeroberfläche zu tun haet) darf nur vom UI-Thread erzeugt/verändert werden.
Am einfachsten ist es, wenn du ein Activity-Objekt hast und dann Activity#runOnUiThread(...); aufrufst.

LG

Liebe Grüße impjor.

Für ein gutes Miteinander: Unsere Regeln
Apps für jeden Einsatzzweck
Stellt eure App vor!

Antworten
  • Forum-Beiträge: 71

02.03.2014, 13:11:39 via Website

@Pascal P. : ScoreAcitivity ist ja die Klasse die ich ganz oben gepostet habe, und in Zeile 135 steht Toast.makeText(ScoreActivity.this, "ioerror",
Toast.LENGTH_SHORT).show();

@impjor: ich habe mich auch gewundert, dass es so viel ist, aber ich habe bei logcat nur "errors" anzeigen lassen, also alles was ich reinkopiert habe, war rot... und mit dem Activity#onUiThread, wie funktioniert das in meinem Fall? sagt mir leider gar nichts..

Lg
Florian S.

Antworten
  • Forum-Beiträge: 1.793

02.03.2014, 14:29:48 via Website

Du brauchst ein Activity-Object. Dann rufst du dessen runOnUiThread(...)-Methode auf. Als Parameter dann ein Runnable mit dem Toast:
1//Pseude-Code
2Activity meineActivity = ....;
3meineActivity.runOnUiThread(new Runnable() {
4void run() {
5Toast.ma...();
6}});
LG

Liebe Grüße impjor.

Für ein gutes Miteinander: Unsere Regeln
Apps für jeden Einsatzzweck
Stellt eure App vor!

Antworten
  • Forum-Beiträge: 71

02.03.2014, 15:17:18 via App

Brauche ich dann für jede Excpetion ein neues Objekt? Sorry kenn mich noch nicht so gut aus mit dem Runnable usw..
Kannst mir des von meinem Code her sagen wo ich was reinmachen muss?

Antworten
  • Forum-Beiträge: 71

02.03.2014, 16:02:47 via App

Okay und muss ich da auch wieder was mit .post machen oder so? bzw. ist das eigentlich jetzt die Lösung damit ich einen besseren Log habe oder damit das Einloggen und Ausloggen richtig funktioniert?

Antworten
  • Forum-Beiträge: 71

02.03.2014, 20:45:08 via Website

Ich wollte eben die Catch-Blöcke nicht leer lassen... Und warum die Infos nicht angezeigt werden, bzw.. warum der Logout funktioniert weißt auch nicht oder?

Das Problem ist, dass ich nirgends für mich verständliche Tutorials für die neue Facebook SDK finde und dann alles nicht so funktioniert wie es funktionieren soll...Aber wie gesagt, erklären kann ich mir das nicht, dass die Daten nicht angezeigt werden obwohl sie wohl erfasst werden und direkt darunter dann eigentlich in der TextView angezeigt werden (zumindest der Name)... und der Logout wird dann wohl einfach nicht so richtig sein, aber weiß da jemand wie man das in meinem App umsetzen kann? Da muss es doch irgendwas geben..

Lg
Florian

— geändert am 02.03.2014, 21:09:30

Antworten
  • Forum-Beiträge: 71

02.03.2014, 21:38:52 via Website

Alles klar, ich habe das jetzt überall drin, hier nochmal die Logcat-Errors:

Beim Login:
wurden diesmal keine Fehler angezeigt (aber leider wird nach wie vor nicht das gewünschte "Welcome Florian S*****" angezeigt...


Beim Logout:
03-02 21:36:29.845: E/AndroidRuntime(32670): FATAL EXCEPTION: main
03-02 21:36:29.845: E/AndroidRuntime(32670): java.lang.NullPointerException
03-02 21:36:29.845: E/AndroidRuntime(32670): at de.ftProductions.volcanoJump.ScoreActivity.onClick(ScoreActivity.java:180)
03-02 21:36:29.845: E/AndroidRuntime(32670): at android.view.View.performClick(View.java:4232)
03-02 21:36:29.845: E/AndroidRuntime(32670): at android.view.View$PerformClick.run(View.java:17298)
03-02 21:36:29.845: E/AndroidRuntime(32670): at android.os.Handler.handleCallback(Handler.java:615)
03-02 21:36:29.845: E/AndroidRuntime(32670): at android.os.Handler.dispatchMessage(Handler.java:92)
03-02 21:36:29.845: E/AndroidRuntime(32670): at android.os.Looper.loop(Looper.java:137)
03-02 21:36:29.845: E/AndroidRuntime(32670): at android.app.ActivityThread.main(ActivityThread.java:4921)
03-02 21:36:29.845: E/AndroidRuntime(32670): at java.lang.reflect.Method.invokeNative(Native Method)
03-02 21:36:29.845: E/AndroidRuntime(32670): at java.lang.reflect.Method.invoke(Method.java:511)
03-02 21:36:29.845: E/AndroidRuntime(32670): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1027)
03-02 21:36:29.845: E/AndroidRuntime(32670): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:794)
03-02 21:36:29.845: E/AndroidRuntime(32670): at dalvik.system.NativeStart.main(Native Method)
03-02 21:36:29.885: E/android.os.Debug(7266): !@Dumpstate > dumpstate -k -t -z -d -o /data/log/dumpstate_app_error

Eine NullPointerException heißt doch, dass irgendetwas wo man drauf zugreifen will null ist oder? Weißt du oder irgendjemand anderes wo? Oder wie hättest du denn den Logout gemacht?

Das waren jetzt übrigens die Logcat-Errors wenn ich den Logout-Vorgang mit
11Session session = Session.getActiveSession();
22 if (!session.isClosed()) {
33 session.closeAndClearTokenInformation();
44 }
ausführe (hier wird in Zeile 2 die NullPointerException angezeigt...

Wenn ich es ändere und den Logout-Vorgang mit
1fb.logout(ScoreActivity.this);
ausführen will, bekomme ich folgende Logcat-Errors:
03-02 22:04:44.965: E/AndroidRuntime(3635): FATAL EXCEPTION: main
03-02 22:04:44.965: E/AndroidRuntime(3635): android.os.NetworkOnMainThreadException
03-02 22:04:44.965: E/AndroidRuntime(3635): at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1118)
03-02 22:04:44.965: E/AndroidRuntime(3635): at java.net.InetAddress.lookupHostByName(InetAddress.java:385)
03-02 22:04:44.965: E/AndroidRuntime(3635): at java.net.InetAddress.getAllByNameImpl(InetAddress.java:236)
03-02 22:04:44.965: E/AndroidRuntime(3635): at java.net.InetAddress.getAllByName(InetAddress.java:214)
03-02 22:04:44.965: E/AndroidRuntime(3635): at libcore.net.http.HttpConnection.<init>(HttpConnection.java:70)
03-02 22:04:44.965: E/AndroidRuntime(3635): at libcore.net.http.HttpConnection.<init>(HttpConnection.java:50)
03-02 22:04:44.965: E/AndroidRuntime(3635): at libcore.net.http.HttpConnection$Address.connect(HttpConnection.java:340)
03-02 22:04:44.965: E/AndroidRuntime(3635): at libcore.net.http.HttpConnectionPool.get(HttpConnectionPool.java:87)
03-02 22:04:44.965: E/AndroidRuntime(3635): at libcore.net.http.HttpConnection.connect(HttpConnection.java:128)
03-02 22:04:44.965: E/AndroidRuntime(3635): at libcore.net.http.HttpEngine.openSocketConnection(HttpEngine.java:315)
03-02 22:04:44.965: E/AndroidRuntime(3635): at libcore.net.http.HttpsURLConnectionImpl$HttpsEngine.makeSslConnection(HttpsURLConnectionImpl.java:461)
03-02 22:04:44.965: E/AndroidRuntime(3635): at libcore.net.http.HttpsURLConnectionImpl$HttpsEngine.connect(HttpsURLConnectionImpl.java:433)
03-02 22:04:44.965: E/AndroidRuntime(3635): at libcore.net.http.HttpEngine.sendSocketRequest(HttpEngine.java:289)
03-02 22:04:44.965: E/AndroidRuntime(3635): at libcore.net.http.HttpEngine.sendRequest(HttpEngine.java:239)
03-02 22:04:44.965: E/AndroidRuntime(3635): at libcore.net.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:273)
03-02 22:04:44.965: E/AndroidRuntime(3635): at libcore.net.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:168)
03-02 22:04:44.965: E/AndroidRuntime(3635): at libcore.net.http.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:271)
03-02 22:04:44.965: E/AndroidRuntime(3635): at com.facebook.android.Util.openUrl(Util.java:224)
03-02 22:04:44.965: E/AndroidRuntime(3635): at com.facebook.android.Facebook.requestImpl(Facebook.java:804)
03-02 22:04:44.965: E/AndroidRuntime(3635): at com.facebook.android.Facebook.request(Facebook.java:707)
03-02 22:04:44.965: E/AndroidRuntime(3635): at com.facebook.android.Facebook.logoutImpl(Facebook.java:649)
03-02 22:04:44.965: E/AndroidRuntime(3635): at com.facebook.android.Facebook.logout(Facebook.java:642)
03-02 22:04:44.965: E/AndroidRuntime(3635): at de.ftProductions.volcanoJump.ScoreActivity.onClick(ScoreActivity.java:180)
03-02 22:04:44.965: E/AndroidRuntime(3635): at android.view.View.performClick(View.java:4232)
03-02 22:04:44.965: E/AndroidRuntime(3635): at android.view.View$PerformClick.run(View.java:17298)
03-02 22:04:44.965: E/AndroidRuntime(3635): at android.os.Handler.handleCallback(Handler.java:615)
03-02 22:04:44.965: E/AndroidRuntime(3635): at android.os.Handler.dispatchMessage(Handler.java:92)
03-02 22:04:44.965: E/AndroidRuntime(3635): at android.os.Looper.loop(Looper.java:137)
03-02 22:04:44.965: E/AndroidRuntime(3635): at android.app.ActivityThread.main(ActivityThread.java:4921)
03-02 22:04:44.965: E/AndroidRuntime(3635): at java.lang.reflect.Method.invokeNative(Native Method)
03-02 22:04:44.965: E/AndroidRuntime(3635): at java.lang.reflect.Method.invoke(Method.java:511)
03-02 22:04:44.965: E/AndroidRuntime(3635): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1027)
03-02 22:04:44.965: E/AndroidRuntime(3635): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:794)
03-02 22:04:44.965: E/AndroidRuntime(3635): at dalvik.system.NativeStart.main(Native Method)
03-02 22:04:45.030: E/android.os.Debug(7266): !@Dumpstate > dumpstate -k -t -z -d -o /data/log/dumpstate_app_error

Weiß leider nicht, was davon jetzt relevant ist....

Lg
Florian

— geändert am 02.03.2014, 22:06:40

Antworten
  • Forum-Beiträge: 71

03.03.2014, 09:06:10 via Website

Das wird in der schon geposteten Funktion getProfileInformation() gemacht, nämlich mit :
1JSONObject profile = new JSONObject(json);
2 // getting name of the user
3 final String name = profile.getString("name");
4 // getting email of the user
5 final String email = profile.getString("email");
6 // getting email of the user
7 final String id = profile.getString("id");
8
9 img_url=new URL("http://graph.facebook.com/"+id+"/pictrue=type=normal");
10 Bitmap bmp = BitmapFactory.decodeStream(img_url.openConnection().getInputStream());
11 pic.setImageBitmap(bmp);
12 welcome.setText("Welcome " + name);

und das welcome.setText sollte doch eigentlich funktionieren oder nicht? Aber wie ganz am Anfang gesagt ist das komische ja, dass das Programm wohl nie dahin springt, denn selbst als ich an den Anfang der Funktion eine Ausgabe auf einer anderen Text-View durchführen wollte hat es nicht funktioniert, wie schon am Anfang beschrieben. Ganz oben ist auch nochmal mein kompletter Quelltext... Weil eigentlich schon komisch, die Funktion wird regulär aufgerufen, und wenn ich das mit dem Logcat richtig interpretiert habe, werden die Daten ja auch erfasst, was doch eigentlich nur in dieser Funktion passiert oder nicht?

LG
Florian

— geändert am 03.03.2014, 09:06:38

Antworten

Empfohlene Artikel