2012-10-05 31 views
0

我在我的應用中使用xml解析解析RSS源。我在我的應用程序中集成了Facebook。我的要求是當我點擊分享按鈕時,它與圖像標題和單一描述共享我的內容。Android:如何在Facebook牆上發佈我的鏈接圖片標題和一些描述

我的主要活動是存儲解析數據。

SplashActivity.java

package com.example.shareslab; 



import java.util.ArrayList; 
import java.util.List; 

import com.example.shareslab.R; 

import android.app.Activity; 
import android.app.ProgressDialog; 
import android.content.Context; 
import android.content.Intent; 
import android.graphics.drawable.Drawable; 
import android.net.ConnectivityManager; 
import android.net.NetworkInfo; 
import android.os.AsyncTask; 
import android.os.Bundle; 
import android.text.Html; 
import android.text.Spanned; 
import android.text.Html.ImageGetter; 
import android.util.Log; 
import android.view.Gravity; 
import android.view.ViewGroup.LayoutParams; 
import android.widget.Toast; 

public class SplashActivity extends Activity { 
    /** Called when the activity is first created. */ 
    ProgressDialog progress; 
    private List<com.example.shareslab.Message> messages; 
    public static String singleDescription; 
    public static String title; 

    static List<String>imageURLAmit; 
    static List<String> titles; 
    static List<String> description,link; 
    public static String[][] arrays; 
    public static ArrayList<String> galleryImages; 
    public static int position=0; 
    //Handle user current location 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.splash_activity); 



     // Register the listener with the Location Manager to receive location updates 

     ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 
     NetworkInfo info = cm.getActiveNetworkInfo(); 
     Log.d("net status ", "show "+info); 
     if (info != null && info.isAvailable()) { 
      Log.d("net connected", "show "+info); 
      System.out.println("Connection OKK"); 
      new DownloadCities().execute();   

     } 
     else{ 
      Log.d("net not connected", "show "+info); 
      Toast.makeText(SplashActivity.this, "Check Internet connection. And try again.", Toast.LENGTH_LONG).show(); 
     } 
    } 


    private class DownloadCities extends AsyncTask<String, Void, String> { 
     private String ResultString = ""; 

     @Override 
     protected void onPostExecute(String result) { 
      // TODO Auto-generated method stub 
      if(progress.isShowing()){ 

       System.out.println("IN POST EXE"); 
       progress.dismiss(); 
       startActivity(new Intent(SplashActivity.this,MessageList.class)); 
      } 


      super.onPostExecute(result); 
     } 

     @Override 
     protected void onPreExecute() { 
      // TODO Auto-generated method stub 

      progress = ProgressDialog.show(SplashActivity.this, "","Loading...."); 
      progress.setIndeterminate(true); 
      progress.getWindow().setGravity(Gravity.BOTTOM);; 

      super.onPreExecute(); 
     } 

     @Override 
     protected String doInBackground(String... arg0) { 
      // TODO Auto-generated method stub 
      try { 
       System.out.println("Going to call getCitiesFromServer()"); 
       loadFeed(); 
      } 
      catch (Exception e) { // <-- Use the correct exception type 
       ResultString = "Some error message"; 
      } 
      return null; 
     } 

    } 


    private void loadFeed(){ 
     position=0; 

     try{ 
      BaseFeedParser parser = new BaseFeedParser(); 
      messages = parser.parse(); 
      titles = new ArrayList<String>(messages.size()); 
      description = new ArrayList<String>(messages.size()); 
      link = new ArrayList<String>(messages.size()); 
      arrays=new String[messages.size()][]; 

      final List<String> imageURL=new ArrayList<String>(1); 
      imageURLAmit=new ArrayList<String>(messages.size()); 
      for (com.example.shareslab.Message msg : messages){ 



       Spanned title=Html.fromHtml(msg.getTitle()); 
       titles.add(title.toString()); 
       link.add(msg.getLink().toString()); 
       Spanned data=Html.fromHtml(msg.getDescription(),new ImageGetter() { 

        public Drawable getDrawable(String source) { 

         // TODO Auto-generated method stub 
          imageURL.add(source); 
         return null; 
        } 
       },null); 



       if(imageURL.size()!=0){ 
        imageURLAmit.add(imageURL.get(0));     

       }else{ 
        imageURLAmit.add("http://blog.kevinlearynet.netdna-cdn.com/files/applausemeter-300x200.jpg"); 
       } 

       System.out.println("Position b4 loop : "+position); 
       int j; 
       arrays[position]=imageURL.toArray(new String[imageURL.size()]); 
       System.out.println("2D array colomn length : "+arrays[position].length); 
       position++; 
       System.out.println("Position afeter loop : "+position); 
       imageURL.clear();   
       description.add(data.toString()); 
       System.out.println("End addition"); 
      } 
      System.out.println("Final Image URL lenght : "+imageURL.size()); 


     } catch (Throwable t){ 
      Log.e("AndroidNews",t.getMessage(),t); 
     } 

    } 

}` 

這裏我對Facebook分享Facebookc.java類。

Facebookc.java

package com.example.shareslab; 



import com.example.shareslabfb.DialogError; 
import com.example.shareslabfb.Facebook; 
import com.example.shareslabfb.Facebook.DialogListener; 
import com.example.shareslabfb.FacebookError; 

import android.app.Activity; 
import android.content.Context; 
import android.content.SharedPreferences; 
import android.content.SharedPreferences.Editor; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.View; 
import android.view.Window; 
import android.widget.Toast; 

public class Facebookc extends Activity{ 

    private static final String APP_ID = "392939617444978"; 
    private static final String[] PERMISSIONS = new String[] {"publish_stream"}; 

    private static final String TOKEN = "access_token"; 
     private static final String EXPIRES = "expires_in"; 
     private static final String KEY = "facebook-credentials"; 

    private Facebook facebook; 
    private String messageToPost; 

    public boolean saveCredentials(Facebook facebook) { 
      Editor editor = getApplicationContext().getSharedPreferences(KEY, Context.MODE_PRIVATE).edit(); 
      editor.putString(TOKEN, facebook.getAccessToken()); 
      editor.putLong(EXPIRES, facebook.getAccessExpires()); 
      return editor.commit(); 
     } 

     public boolean restoreCredentials(Facebook facebook) { 
      SharedPreferences sharedPreferences = getApplicationContext().getSharedPreferences(KEY, Context.MODE_PRIVATE); 
      facebook.setAccessToken(sharedPreferences.getString(TOKEN, null)); 
      facebook.setAccessExpires(sharedPreferences.getLong(EXPIRES, 0)); 
      return facebook.isSessionValid(); 
     } 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     facebook = new Facebook(APP_ID); 
     restoreCredentials(facebook); 

     requestWindowFeature(Window.FEATURE_NO_TITLE); 

     setContentView(R.layout.facebook_dialog); 

     String facebookMessage = getIntent().getStringExtra("facebookMessage"); 
     if (facebookMessage == null){ 
      facebookMessage = ""; 
     } 
     messageToPost = facebookMessage; 
    } 

    public void doNotShare(View button){ 
     finish(); 
    } 
    public void share(View button){ 
     if (! facebook.isSessionValid()) { 
      loginAndPostToWall(); 
     } 
     else { 
      postToWall(messageToPost); 
     } 
    } 

    public void loginAndPostToWall(){ 
     facebook.authorize(this, PERMISSIONS, Facebook.FORCE_DIALOG_AUTH, new LoginDialogListener()); 
    } 

    public void postToWall(String message){ 
       Bundle parameters = new Bundle(); 

       parameters.putString("message", message); 
       parameters.putString("name", "titles.get(position)"); 
       parameters.putString("caption","shareslab.com"); 
       parameters.putString("link", "http://www.shareslab.com"); 
       parameters.putString("picture", "imageURLAmit.get(position)"); 
       parameters.putString("description","description.get(position)"); 

       try { 
        facebook.request("me"); 
      String response = facebook.request("me/feed", parameters, "POST"); 
      Log.d("Tests", "got response: " + response); 
      if (response == null || response.equals("") || 
        response.equals("false")) { 
       showToast("Blank response."); 
      } 
      else { 
       showToast("Message posted to your facebook wall!"); 
      } 
      finish(); 
     } catch (Exception e) { 
      showToast("Failed to post to wall!"); 
      e.printStackTrace(); 
      finish(); 
     } 
    } 

    class LoginDialogListener implements DialogListener { 
     public void onComplete(Bundle values) { 
      saveCredentials(facebook); 
      if (messageToPost != null){ 
      postToWall(messageToPost); 
     } 
     } 
     public void onFacebookError(FacebookError error) { 
      showToast("Authentication with Facebook failed!"); 
      finish(); 
     } 
     public void onError(DialogError error) { 
      showToast("Authentication with Facebook failed!"); 
      finish(); 
     } 
     public void onCancel() { 
      showToast("Authentication with Facebook cancelled!"); 
      finish(); 
     } 
    } 

    private void showToast(String message){ 
     Toast.makeText(getApplicationContext(), message, Toast.LENGTH_SHORT).show(); 
    } 
} 

回答

0

酪氨酸這段代碼

public void postToWall(String message){ 
      try { 
     String response=facebook.request("me"); 
     Bundle parameters = new Bundle(); 
     parameters.putString("message", _id); 
     parameters.putString("caption", " message."); 
     parameters.putString("description", "A secret message is waiting for you."); 
     parameters.putString("name", "A Secret Message For You"); 
     parameters.putString("picture", "http://sheokhanda.files.wordpress.com/2010/06/spring-colors.jpg"); 
     parameters.putString("link", "http://www.google.com"); 

     response = facebook.request("me/feed", parameters, "POST"); 

     Log.d("Tests", "got response: " + response); 
     if (response == null || response.equals("") || response.equals("false")) { 
      Log.i(TAG, "Blank Response..."); 
     } 
     else { 
      Log.i(TAG, "Message posted to your facebook wall!.."); 
     } 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

它需要這個權限publish_stream

+0

thanku先生爲geving響應..它會給錯誤,如何可以給予權限「public_stream」? – akash

+0

您已經有權限。在你的代碼.. –

+0

其給出的錯誤,你可以給這個類的整個代碼 – akash

1

如果你的圖像保存在SD卡,那麼你就可以得到後使用下面的代碼圖像的uri: -

這裏在代碼中,uri of im年齡被宣佈爲imageUri。

public void performPostToWall(Uri imageUri){ 
    byte[] data = null; 
    ContentResolver cr = context.getContentResolver(); 
    InputStream in = null; 

    try { 
     in = cr.openInputStream(imageUri); 
     BitmapFactory.Options options = new BitmapFactory.Options(); 
     options.inSampleSize = 1; 
     Bitmap thumb = BitmapFactory.decodeStream(in, null, options); 
     ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
     thumb.compress(Bitmap.CompressFormat.JPEG, 100, baos); 
     data = baos.toByteArray(); 
    } catch (FileNotFoundException e) { 
     e.printStackTrace(); 
    } catch (Exception e) { 
     Toast.makeText(context, "Unable to upload image", Toast.LENGTH_LONG).show(); 
    } 

    Bundle params = new Bundle(); 
    params.putByteArray("picture", data); 
    if (!(captionText == null || captionText.equals(""))) 
     params.putString("caption", captionText); 

    Request req = new Request(session, "me/photos", params, HttpMethod.POST, new Request.Callback() { 
     @Override 
     public void onCompleted(Response response) { 
      context.onPostToMyWallWithImageResponse(response); 
     } 
    }); 

    req.executeAsync(); 

} 
相關問題