Ich versuche, ein Facebook-Profilbild in meiner Android App auf dem oberen Teil einer Navigationsschublade zu laden, aber scheinen eine Ausnahme zu bekommen. Ich habe durch Stapelüberläufe gegossen, die erklären, wie man das Bild mit Bitmap, Picasso usw. lädt, aber aus irgendeinem Grund noch nicht geladen werden konnte. Ich glaube, das Problem ist ein Netzwerk-Thread-Problem, aber ich dachte, dass, weil ich die Methode mit .executeAsync() ausführen, dass es keine Rolle spielen würde. Hier ist die xml, wo ich das Bild zu erklären, dass ein Profilbild sein (nav_header_main.xml): bekommen Ausnahmen beim Laden von Facebook Profilbild in Android mit Facebook SDK 4+
<de.hdodenhof.circleimageview.CircleImageView
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/profile_image"
android:layout_width="70dp"
android:layout_height="70dp"
android:src="@drawable/hanger_circle"
app:border_color="#FF000000"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_marginBottom="8dp"/>
</RelativeLayout>
Hier ist der Ausschnitt aus meiner Tätigkeit, wo ich das Bild anfordern (auf Erfolg von Facebook Login :
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//initialize facebook sdk
FacebookSdk.sdkInitialize(getApplicationContext());
setContentView(R.layout.activity_login);
//Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
//setSupportActionBar(toolbar);
//call custom application class to initialize intercom (not login, just setup)
ApplicationHelper helper = (ApplicationHelper)getApplicationContext();
//create facebook button recognition
callbackManager = CallbackManager.Factory.create();
LoginManager.getInstance().registerCallback(callbackManager,
new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
//facebook picture stuff
Bundle params = new Bundle();
params.putString("fields", "id,email,gender,cover,picture.type(large)");
new GraphRequest(AccessToken.getCurrentAccessToken(), "me", params, HttpMethod.GET,
new GraphRequest.Callback() {
@Override
public void onCompleted(GraphResponse response) {
if (response != null) {
try {
JSONObject data = response.getJSONObject();
if (data.has("picture")) {
String profilePicUrl = data.getJSONObject("picture").getJSONObject("data").getString("url");
// set profile image to imageview using Picasso or Native methods
Bitmap profilePic = getFacebookProfilePicture(profilePicUrl);
ImageView mImageView = (ImageView) findViewById(R.id.profile_image);
mImageView.setImageBitmap(profilePic);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
}).executeAsync();
// launch next activity
Toast.makeText(getApplicationContext(), "SUCCESS", Toast.LENGTH_SHORT).show();
startActivity(new Intent(LoginActivity.this, MainActivity.class));
finish();
}
@Override
public void onCancel() {
// App code
Toast.makeText(getApplicationContext(), "CANCEL", Toast.LENGTH_SHORT).show();
}
@Override
public void onError(FacebookException exception) {
// App code
Toast.makeText(getApplicationContext(), "FAIL", Toast.LENGTH_SHORT).show();
}
});
//check if facebook user is logged in already
AccessToken token = AccessToken.getCurrentAccessToken();
Profile prof = Profile.getCurrentProfile();
if(token != null && prof != null){
//log in
//Toast.makeText(getApplicationContext(), token.getToken(), Toast.LENGTH_SHORT).show();
startActivity(new Intent(LoginActivity.this, MainActivity.class));
finish();
}
//check if regular user is logged in already
SharedPreferences shared = getSharedPreferences("shared", MODE_PRIVATE);
if(shared.contains("username") && shared.contains("password")){
//password exists in file so launch next activity (make sure there correct with API)
startActivity(new Intent(LoginActivity.this, MainActivity.class));
finish();
}
}
ich auch diese Hilfsmethode verwenden:
public static Bitmap getFacebookProfilePicture(String url){
URL facebookProfileURL= null;
Bitmap bitmap = null;
try {
facebookProfileURL = new URL(url);
bitmap = BitmapFactory.decodeStream(facebookProfileURL.openConnection().getInputStream());
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return bitmap;
}
Hier meine Ausnahme: 05-26 14: 20: 05.751 11101-11101/com.android.press.press W/System.err: android.os.NetworkOnMainThreadException 05-26 14: 20: 05.751 11101-11101/com.android.press. w/System.err drücken: bei android.os.StrictMode $ AndroidBlockGuardPolicy.onNetwork (StrictMode.java:1147) 05-26 14: 20: 05.751 11101-11101/com.android.press.press W/System.err: at java.net.InetAddress.lookupHostByName (InetAddress.java:418) 05-26 14: 20: 05.751 11101-11101/com.android.press.press W/System.err: at java.net.InetAddress.getAllByNameImpl (InetAddress.java:252) 05-26 14: 20: 05.751 11101-11101/com.android.press.press W/System.err: bei java.net.InetAddress.getAllByName (InetAddress.java:215) 05- 26 14: 20: 05.751 11101-11101/com.android.press.press W/System.err: unter com.android.okhttp.HostResolver $ 1.getAllByName (HostResolver.java:29) 05-26 14: 20: 05.752 11101-11101/com.android.press.press W/System.err: unter com.android.okhttp.internal.http.RouteSelector.resetNextInetSocketAddress (RouteSelector.java:232) 05- 26 14: 20: 05.752 11101-11101/com.android.press.press W/System.err: unter com.android.okhttp.internal.http.RouteSelector.next (RouteSelector.java:124) 05-26 14: 20: 05.752 11101-11101/com.android.press.press W/System.err: bei com.android.okhttp.internal.http.HttpEngine.connect (HttpEngine.java:272) 05-26 14: 20: 05.752 11101-11101/com.android.press.press W/System.err: bei com.android.okhttp.internal.http.HttpEngine.sendRequest (HttpEngine.java:211) 05-26 14: 20: 05.752 11101-11101 /com.android.press.press W/System.err: unter com.android.okhttp.internal.http.HttpURLConnectionImpl.execute (HttpURLConnectionImpl.java:373) 05-26 14: 20: 05.752 11101-11101/com. android.pre ss.press W/System.err: unter com.android.okhttp.internal.http.HttpURLConnectionImpl.getResponse (HttpURLConnectionImpl.java:323) 05-26 14: 20: 05.752 11101-11101/com.android.press.press W/System.err: at com.android.okhttp.internal.http.HttpURLConnectionImpl.getInputStream (HttpURLConnectionImpl.java:190) 05-26 14: 20: 05.752 11101-11101/com.android.press.press W/System .err: at com.android.okhttp.internal.http.DelegatingHttpsURLConnection.getInputStream (DelegatingHttpsURLConnection.java:210) 05-26 14: 20: 05.752 11101-11101/com.android.press.press W/System.err: bei com.android.okhttp.internal.http.HttpsURLConnectionImpl.getInputStream (HttpsURLConnectionImpl.java:25) 05-26 14: 20: 05.752 11101-11101/com.android.press.press W/System.err: at com. android.press.press.LoginActivity.getFacebookProfilePicture (LoginActivity.java:215) 05-26 14: 20: 0 5.752 11101-11101/com.android.press.press W/System.err: unter com.android.press.press.LoginActivity $ 1 $ 1.onCompleted (LoginActivity.java:85) 05-26 14: 20: 05.752 11101- 11101/com.android.press.press W/System.err: um com.facebook.GraphRequest $ 5.run (GraphRequest.java:1379) 05-26 14: 20: 05.752 11101-11101/com.android.press.drücken Sie W/System.err: bei android.os.Handler.handleCallback (Handler.java:739) 05-26 14: 20: 05.752 11101-11101/com.android.press.press W/System.err: bei android .os.Handler.dispatchMessage (Handler.java:95) 05-26 14: 20: 05.752 11101-11101/com.android.press.press W/System.err: bei android.os.Looper.loop (Looper. java: 135) 05-26 14: 20: 05.752 11101-11101/com.android.press.press W/System.err: bei android.app.ActivityThread.main (ActivityThread.java:5221) 05-26 14 : 20: 05.752 11101-11101/com.android.press.press W/System.err: at java.lang.reflect.Method.invoke (systemeigene Methode) 05-26 14: 20: 05.752 11101-11101/com. android.press.press W/System.err: at java.lang.reflect.Method.invoke (Methode.java:372) 05-26 14: 20: 05.752 11101-11101/com.android.press.press W/System.err: at com.android.internal.os.ZygoteInit $ MethodAndArgs Caller.run (ZygoteInit.java:899) 05-26 14: 20: 05.752 11101-11101/com.android.press.press W/System.err: bei com.android.internal.os.ZygoteInit.main (ZygoteInit .java: 694)
Bitte lassen Sie mich wissen, wenn ich etwas falsch mache. Ich habe eine Vielzahl von Quellen versucht, aber das scheint die beliebteste Antwort zu sein. Ich würde die Hilfe sehr schätzen. Vielen Dank im Voraus