0

我需要使用 FourSquare 在签到时上传照片。如果有人这样做,请帮助我传递参数。我参考了 FourSquare 官方文档: https ://developer.foursquare.com/docs/photos/add 。我在最后三个参数中面临问题。如果你已经完成了,请帮助我。谢谢你提前......

4

3 回答 3

3

参数postUrlpostContentIdpostText是可选的,因此您不需要提供它们。postUrlpostContentId用于提供您的照片可以链接到的链接以获取更多信息。postText是关于照片的简短评论。

于 2012-12-10T20:01:15.137 回答
0

/* * 将foursquare sdk 文件放入projects libs 文件夹,后面的代码放入Activity 文件*/

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;
       }

}
于 2013-10-28T09:50:29.410 回答
0

我通过以下代码成功地将图像上传到 Foursquare:

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);
} 
于 2014-04-03T19:22:11.977 回答