2013-03-24 44 views
0

在我的Facebook Android应用程序中,我需要将图像从SD卡上传到Facebook中的特定相册。我可以创建一个相同名称的SD卡文件夹。但是在创建相册后,它会得到一个异常 - android.os.NetworkOnMainThreadException。这里是我的代码 -错误:图像从sd卡上传到facebook中的相册android sdk

private void uploadImage() 
{ 
    String ExternalStorageDirectoryPath = Environment 
       .getExternalStorageDirectory() 
       .getAbsolutePath(); 

    String targetPath = ExternalStorageDirectoryPath + "/Friends/"; 


    File targetDirector = new File(targetPath); 

    File[] files = targetDirector.listFiles(); 

    for (File file : files) 
    {  
     Bitmap bmp = BitmapFactory.decodeFile(file.getAbsolutePath()); 
     ByteArrayOutputStream stream = new ByteArrayOutputStream(); 
     bmp.compress(Bitmap.CompressFormat.PNG, 100, stream); 
     final byte[] data = stream.toByteArray(); 

     facebook.authorize(MainActivity.this, new String[]{ "user_photos,publish_checkins,publish_actions,publish_stream"},new DialogListener()   
     {     
      @Override     
      public void onComplete(Bundle values) 
      { 

       if(verify) 
       { 
        myAlbumId = createAlbumName(); 
        verify=false; 
       } 
       uploadImagesToAlbum(data, myAlbumId); 

      } 

      @Override 
      public void onFacebookError(FacebookError error) 
      { 
       Toast.makeText(MainActivity.this, "FaceBook Error", Toast.LENGTH_LONG).show(); 
      } 

      @Override      
      public void onError(DialogError e) 
      { 
       Toast.makeText(MainActivity.this, "Error", Toast.LENGTH_LONG).show(); 
      }      

      @Override      
      public void onCancel() 
      { 
       Toast.makeText(MainActivity.this, "Canceled", Toast.LENGTH_LONG).show(); 
      }   
     }); 
    } 

} 

private String createAlbumName() 
{ 
    Bundle params = new Bundle(); 
    params.putString("name", "Friends"); 
    params.putString("message", "My Test Album Description Here"); 
    mAsyncRunner.request("me/albums", params, "POST", new SampleUploadListener(), null); 
    String response = ""; 
    String albumId = ""; 
    try { 
     response = facebook.request("https://graph.facebook.com/me/albums",params,"POST"); 
    } catch (FileNotFoundException e1) { 
     // TODO Auto-generated catch block 
     e1.printStackTrace(); 
    } catch (MalformedURLException e1) { 
     // TODO Auto-generated catch block 
     e1.printStackTrace(); 
    } catch (IOException e1) { 
     // TODO Auto-generated catch block 
     e1.printStackTrace(); 
    } 
    try { 
     albumId=Util.parseJson(response).getString("id"); 
    } catch (FacebookError e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (JSONException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    return albumId; 
} 

private void uploadImagesToAlbum(byte[] byteArray, String albumId) 
{ 
    if (albumId == null) { 
     albumId = "me"; 
    } 
    Bundle params = new Bundle(); 
    params.putByteArray("picture", byteArray); 
    mAsyncRunner.request(albumId+"/photos", params, "POST", new SampleUploadListener(), null); 


} 

这是我对数

03-24 04:06:27.954: E/AndroidRuntime(1054): FATAL EXCEPTION: main 03-24 04:06:27.954: E/AndroidRuntime(1054): android.os.NetworkOnMainThreadException 03-24 04:06:27.954: E/AndroidRuntime(1054): at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1117) 03-24 04:06:27.954: E/AndroidRuntime(1054): at java.net.InetAddress.lookupHostByName(InetAddress.java:385) 03-24 04:06:27.954: E/AndroidRuntime(1054): at java.net.InetAddress.getAllByNameImpl(InetAddress.java:236) 03-24 04:06:27.954: E/AndroidRuntime(1054): at java.net.InetAddress.getAllByName(InetAddress.java:214) 03-24 04:06:27.954: E/AndroidRuntime(1054): at libcore.net.http.HttpConnection.(HttpConnection.java:70) 03-24 04:06:27.954: E/AndroidRuntime(1054): at libcore.net.http.HttpConnection.(HttpConnection.java:50) 03-24 04:06:27.954: E/AndroidRuntime(1054): at libcore.net.http.HttpConnection$Address.connect(HttpConnection.java:340) 03-24 04:06:27.954: E/AndroidRuntime(1054): at libcore.net.http.HttpConnectionPool.get(HttpConnectionPool.java:87) 03-24 04:06:27.954: E/AndroidRuntime(1054): at libcore.net.http.HttpConnection.connect(HttpConnection.java:128) 03-24 04:06:27.954: E/AndroidRuntime(1054): at libcore.net.http.HttpEngine.openSocketConnection(HttpEngine.java:316) 03-24 04:06:27.954: E/AndroidRuntime(1054): at libcore.net.http.HttpsURLConnectionImpl$HttpsEngine.makeSslConnection(HttpsURLConnectionImpl.java:461) 03-24 04:06:27.954: E/AndroidRuntime(1054): at libcore.net.http.HttpsURLConnectionImpl$HttpsEngine.connect(HttpsURLConnectionImpl.java:433) 03-24 04:06:27.954: E/AndroidRuntime(1054): at libcore.net.http.HttpEngine.sendSocketRequest(HttpEngine.java:290) 03-24 04:06:27.954: E/AndroidRuntime(1054): at libcore.net.http.HttpEngine.sendRequest(HttpEngine.java:240) 03-24 04:06:27.954: E/AndroidRuntime(1054): at libcore.net.http.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:81) 03-24 04:06:27.954: E/AndroidRuntime(1054): at libcore.net.http.HttpsURLConnectionImpl.connect(HttpsURLConnectionImpl.java:165) 03-24 04:06:27.954: E/AndroidRuntime(1054): at com.facebook.android.Util.openUrl(Util.java:197) 03-24 04:06:27.954: E/AndroidRuntime(1054): at com.facebook.android.Facebook.requestImpl(Facebook.java:806) 03-24 04:06:27.954: E/AndroidRuntime(1054): at com.facebook.android.Facebook.request(Facebook.java:794) 03-24 04:06:27.954: E/AndroidRuntime(1054): at com.example.androidfacebookpractice.MainActivity.createAlbumName(MainActivity.java:340) 03-24 04:06:27.954: E/AndroidRuntime(1054): at com.example.androidfacebookpractice.MainActivity.access$4(MainActivity.java:331) 03-24 04:06:27.954: E/AndroidRuntime(1054): at com.example.androidfacebookpractice.MainActivity$9.onComplete(MainActivity.java:290) 03-24 04:06:27.954: E/AndroidRuntime(1054): at com.facebook.android.Facebook.onSessionCallback(Facebook.java:345) 03-24 04:06:27.954: E/AndroidRuntime(1054): at com.facebook.android.Facebook.access$11(Facebook.java:326) 03-24 04:06:27.954: E/AndroidRuntime(1054): at com.facebook.android.Facebook$1.call(Facebook.java:304) 03-24 04:06:27.954: E/AndroidRuntime(1054): at com.facebook.Session$3$1.run(Session.java:1179) 03-24 04:06:27.954: E/AndroidRuntime(1054): at android.os.Handler.handleCallback(Handler.java:725) 03-24 04:06:27.954: E/AndroidRuntime(1054): at android.os.Handler.dispatchMessage(Handler.java:92) 03-24 04:06:27.954: E/AndroidRuntime(1054): at android.os.Looper.loop(Looper.java:137) 03-24 04:06:27.954: E/AndroidRuntime(1054): at android.app.ActivityThread.main(ActivityThread.java:5039) 03-24 04:06:27.954: E/AndroidRuntime(1054): at java.lang.reflect.Method.invokeNative(Native Method) 03-24 04:06:27.954: E/AndroidRuntime(1054): at java.lang.reflect.Method.invoke(Method.java:511) 03-24 04:06:27.954: E/AndroidRuntime(1054): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 03-24 04:06:27.954: E/AndroidRuntime(1054): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 03-24 04:06:27.954: E/AndroidRuntime(1054): at dalvik.system.NativeStart.main(Native Method)

如何上传图片到相册?由于

回答

0

你可以发布你的日志,使所有能够帮助你..

它的连接错误,不图片上传错误。

U无法连接直接把所有的网络访问放在一个线程或处理程序或async服务器上。

+0

谢谢您的回答。我如何解决这个问题? – andDev 2013-03-24 04:49:10

0

当应用程序尝试在其主线程上执行联网操作时,会引发此异常。 我使用新线程解决此问题

Thread thread = new Thread() 
{ 
    @Override 
    public void run() { 
     try { 
      //Your code goes here 
      }        
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
}; 

thread.start(); 
+0

感谢您的回答。但是,当我把线程保存到@Override public void onComplete(Bundle values) – andDev 2013-03-24 05:04:51

+0

我在哪里使用线程? – andDev 2013-03-24 05:05:42