- Forum-Beiträge: 71
28.02.2014, 15:42:32 via Website
28.02.2014 15:42:32 via Website
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:
2 if (!session.isClosed()) {
3 session.closeAndClearTokenInformation();
4 }
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)
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********"}