如何在安卓设备中获取Facebook个人资料图片?

3
img_url = new URL("http://graph.facebook.com/" + user.getId() + "/picture?type=large");
                            InputStream is = img_url.openConnection().getInputStream();
                            Bitmap avatar;
                            avatar = BitmapFactory.decodeStream(is);
                            ivAvatar.setImageBitmap(avatar);

当我获取Facebook个人资料图片时,出现了以下错误。
android.os.NetworkOnMainThreadException

如何解决它?


你应该发布一个新问题,针对一个新的问题。 - James
2个回答

5
你的问题中删除了一部分内容(仅供参考):
在 http:// http://graph.facebook.com/100001119045663/picture?type=large 中缺少第二个 /。
 java.net.UnknownHostException: http:/graph.facebook.com/100001119045663/picture?type=large

java.net.UnkownHostException指出不能访问URL,可能是连接问题或URL格式不正确/无效。

第二部分-问题添加 NetworkOnMainThread相当描述性。如果您从onCreate、onResume等调用函数,则在UI线程上执行代码。这意味着如果您正在处理代码,可以冻结UI。您需要创建一个单独的任务或线程。有关我所说的内容以及如何实现解决方案的更多信息,请参阅http://www.vogella.com/tutorials/AndroidBackgroundProcessing/article.html

TLDR版本...

package de.vogella.android.asynctask;

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;

import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;

import de.vogella.android.asyntask.R;

 import android.app.Activity;
 import android.os.AsyncTask;
 import android.os.Bundle;
 import android.view.View;
 import android.widget.TextView;

public class ReadWebpageAsyncTask extends Activity {
      private TextView textView;

   @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    HTTPExample task = new HTTPExample ();
    task.execute(new String[] { "http://pictureurl.com/image.jpg" });
  }

  private class HTTPExample extends AsyncTask<String, Void, String> {
         @Override
        protected String doInBackground(String... urls) {
        //urls is an array not a string, so iterate through urls.
        //Get Picture Here - BUT DONT UPDATE UI, Return a reference of the object
        return response;
        }

         @Override
         protected void onPostExecute(String result) {
         //Update UI
         Log.i("Result", result);
       }
   }


} 

0
Profile profile = Profile.getCurrentProfile();

Uri uri = profile.getProfilePictureUri(72, 72); //72 is the height and width of the profile pic, facebook will clip it for you.

new Thread(new Runnable() {
    @Override
    public void run() {
        try{
            URL newURL = new URL(uri.toString());
            Bitmap profilePic = BitmapFactory.decodeStream(newURL.openConnection().getInputStream());}
        catch (IOException e)
        {e.printStackTrace();}
    }
}).start();

这对我有效。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接