2012-12-10 165 views

回答

3

參數postUrlpostContentIdpostText是可選的,所以你不必爲他們提供。 postUrlpostContentId用於提供您的照片可以鏈接到的鏈接以獲取更多信息。 postText是對照片的簡短評論。

+0

可以請你告訴我需要傳遞圖像數據的參數嗎? – Richa

+0

該照片未在其中一個參數中傳遞。圖像數據作爲HTTP請求的POST消息正文發送。請參閱http://en.wikipedia.org/wiki/HTTP_request#Request_message獲取更多關於HTTP請求的信息。 – pfhayes

+0

Thanx親愛的對於我們的支持完成... + 1快速回復 – Richa

0

/* *把Foursquare的SDK文件到libs文件夾的項目和以後的代碼到活動文件 */

todaydate = Latest Date; 
venueId = The Venue Id is important. 
URL = The image url from which the image will be downloaded to sd card; 

foursquare = new Foursquare(
     "Your Client Id", //*client id 
     "Your Client Secret", //*client secret 
     "Callback Url"); 

foursquare.authorize(ActivityName.this, new FoursquareAuthenDialogListener()); 

// Creates Bitmap from InputStream and returns it 
private Bitmap downloadImage(String url) { 
    Bitmap bitmap = null; 
    InputStream stream = null; 
    BitmapFactory.Options bmOptions = new BitmapFactory.Options(); 
    bmOptions.inSampleSize = 1; 

    try { 
     stream = getHttpConnection(url); 
     bitmap = BitmapFactory.decodeStream(stream, null, bmOptions); 
     stream.close(); 
    } catch (IOException e1) { 
     e1.printStackTrace(); 
    } 
    return bitmap; 
} 

// Makes HttpURLConnection and returns InputStream 
private InputStream getHttpConnection(String urlString) 
     throws IOException { 
    InputStream stream = null; 
    URL url = new URL(urlString); 
    URLConnection connection = url.openConnection(); 

    try { 
     HttpURLConnection httpConnection = (HttpURLConnection) connection; 
     httpConnection.setRequestMethod("GET"); 
     httpConnection.connect(); 

     if (httpConnection.getResponseCode() == HttpURLConnection.HTTP_OK) { 
      stream = httpConnection.getInputStream(); 
     } 
    } catch (Exception ex) { 
     ex.printStackTrace(); 
    } 
    return stream; 
} 


@SuppressLint("SdCardPath") 
private class FoursquareAuthenDialogListener implements DialogListener { 


    @Override 
    public void onComplete(Bundle values) { 

     foursquareAccessToken = Foursquare.mAccessToken; 
     //Toast.makeText(getApplicationContext(), "TOKEN: " + foursquareAccessToken, Toast.LENGTH_LONG).show(); 

     new downloadUploadedImage().execute(); 

    } 

    @Override 
    public void onFoursquareError(FoursquareError e) { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public void onError(DialogError e) { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public void onCancel() { 
     // TODO Auto-generated method stub 

    } 
} 



/* 
* downloadUploadedImage Class will download image from url and convert to bitmap image, 
* using that bitmap image then convert it to file and get the file path from sd card 
* to upload image to fs from sdcard. 
*/ 
public class downloadUploadedImage extends AsyncTask<String, Void, String>{ 

    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 
     dialog = ProgressDialog.show(MyActivityName.this, "", "Posting Image to Foursquare...", true); 
    } 

    @Override 
    protected String doInBackground(String... params) { 

     bitMapImage = downloadImage(URL); 
     writeExternalToCache(bitMapImage, file); 
     return null; 
    } 

    @Override 
    protected void onPostExecute(String result){ 
     super.onPostExecute(result); 

     if(file.exists()){ 
      //Toast.makeText(getApplicationContext(), "PIC PATH: " + file.toString(), Toast.LENGTH_LONG).show(); 
      //Toast.makeText(getApplicationContext(), "PIC PATH: " + picPATH, Toast.LENGTH_LONG).show(); 
      picturePath = file.toString(); 

      BitmapFactory.Options options=new BitmapFactory.Options(); 
      options.inJustDecodeBounds = true; 
      BitmapFactory.decodeFile(picturePath,options); 
      final int REQUIRED_SIZE=200; 
      //Find the correct scale value. It should be the power of 2. 
      int scale=1; 
      while(options.outWidth/scale/2>=REQUIRED_SIZE && options.outHeight/scale/2>=REQUIRED_SIZE) 
       scale*=2; 

      BitmapFactory.Options o2 = new BitmapFactory.Options(); 
      o2.inSampleSize=scale; 
      preview_bitmap = BitmapFactory.decodeFile(picturePath,o2); 
      ByteArrayOutputStream bos = new ByteArrayOutputStream(); 
      preview_bitmap.compress(CompressFormat.JPEG, 75, bos); 
      fileContent = bos.toByteArray(); //byte array static byte[] fileContent; 

      new UploadImageToFsProfile().execute(); 

     } else { 


      //Toast.makeText(getApplicationContext(), "Image not exist in sdcard.", Toast.LENGTH_LONG).show(); 
     } 

    } 
} 


public class UploadImageToFsProfile extends AsyncTask<String, Void, String>{//params,progress,result 
    @Override 
    protected void onPreExecute(){ 
     super.onPreExecute(); 


    } 
    @SuppressWarnings("deprecation") 
    @Override 
    protected String doInBackground(String... params) { 
     // TODO Auto-generated method stub 
     HttpClient httpclient = new DefaultHttpClient(); 
     HttpPost httppost = new HttpPost("https://api.foursquare.com/v2/photos/add"); 

     try 
     { 
      @SuppressWarnings("deprecation") 
      /* 
      * To use MultipartEntity class use httpclient-X.x.jar , httpcore-X.x.jar ,httpmime-X.x.jar 
      * and apachemime4jcore-X.x.jar 
      */ 
      MultipartEntity entity = new MultipartEntity(); 
      entity.addPart("v", new StringBody(todaydate)); 
      entity.addPart("venueId", new StringBody(venueId)); 
      entity.addPart("public", new StringBody("1")); 
      entity.addPart("oauth_token", new  StringBody(foursquareAccessToken)); 
      ByteArrayBody imgBody = new ByteArrayBody(ChFsLogin.fileContent, "image/jpeg", "FS_image"); 

      entity.addPart("image",imgBody); 
      httppost.setEntity(entity); 
      HttpResponse response = httpclient.execute(httppost); 
      responseResult = inputStreamToString(response.getEntity().getContent()).toString(); 
     } 
     catch (ClientProtocolException e) 
     { } 
     catch (IOException e) 
     { } 

     return responseResult; 
    } 
    @Override 
    protected void onPostExecute(String result){ 
     super.onPostExecute(result); 

     dialog.dismiss(); 

     System.out.println("RES"+responseResult); 
     JSONObject obj; 
     try { 
      obj = new JSONObject(result); 
      //JSONArray meta = 
      obj = obj.getJSONObject("meta"); 
      code = obj.getInt("code"); 
      if(obj.has("errorDetail")){   
       Toast.makeText(getApplicationContext(), obj.getString("errorDetail"), Toast.LENGTH_LONG).show(); 

      } 

      //Toast.makeText(getApplicationContext(), "code:"+code, Toast.LENGTH_LONG).show(); 
     } catch (JSONException e1) { 
      // TODO Auto-generated catch block 
      e1.printStackTrace(); 
     } 



     if (code ==200) { 
      Toast.makeText(getApplicationContext(), "Your Image Has Successfully Posted to FourSquare.", Toast.LENGTH_LONG).show(); 

     } else { 

     Toast.makeText(getApplicationContext(), "Unable to Post Image to FourSquare.", Toast.LENGTH_LONG).show(); 
     } 


     File fileToDelete = new File(file.toString()); 
     boolean deleted = fileToDelete.delete(); 
     if (deleted) { 

     } else { 

     } 




    } 

    private StringBuilder inputStreamToString(InputStream is) { 
     String rLine = ""; 
     StringBuilder answer = new StringBuilder(); 
     BufferedReader rd = new BufferedReader(new InputStreamReader(is)); 

     try { 
     while ((rLine = rd.readLine()) != null) { 
      answer.append(rLine); 
      } 
     } 

     catch (IOException e) { 
      e.printStackTrace(); 
     } 
     return answer; 
     } 

} 
0

我成功上傳的圖像通過下面的代碼來四方的

mBitmap.compress(Bitmap.CompressFormat.JPEG, 100, stream); 
byte[] bitmapdata = stream.toByteArray(); 

HttpClient httpclient = new DefaultHttpClient(); 
HttpPost httppost = new HttpPost("https://api.foursquare.com/v2/photos/add"); 

try 
{ 
    MultipartEntity entity = new MultipartEntity(); 
    entity.addPart("v", new StringBody("20121210")); 
    entity.addPart("venueId", new StringBody(venue.getId())); 
    entity.addPart("public", new StringBody("1")); 
    entity.addPart("oauth_token", new  StringBody(mAccessToken)); 
    ByteArrayBody imgBody = new ByteArrayBody(bitmapdata, "image/jpeg", "FS_image"); 

    entity.addPart("image",imgBody); 
    httppost.setEntity(entity); 
    HttpResponse response = httpclient.execute(httppost); 
    Log.v("response","" +response); 
    responseResult = inputStreamToString(response.getEntity().getContent()).toString(); 
} 
catch (ClientProtocolException e) 
{ 
    Log.d(TAG, "Opening URL " +e); 
}