2014-01-14 156 views
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中获取Facebook个人资料图片?

android.os.NetworkOnMainThreadException 

如何解决?

+0

你应该发布一个新的问题,为一个新的问题。 – James

+0

把它放在一个线程中。 –

回答

4

你的编辑(删除)你的问题的一部分(仅供参考)

你错过了第二/ 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(); 

这对我的作品。

相关问题