【问题标题】:FourSquare Photo upload on checkin with Android使用 Android 签到时上传 FourSquare 照片
【发布时间】:2014-04-04 03:45:32
【问题描述】:

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

【问题讨论】:

    标签: android foursquare


    【解决方案1】:

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

    【讨论】:

    • 你能告诉我我需要在哪个参数中传递图像数据吗?
    • 照片没有传入其中一个参数。图像数据作为 HTTP 请求的 POST 消息正文发送。有关 HTTP 请求的更多信息,请参阅en.wikipedia.org/wiki/HTTP_request#Request_message
    • 感谢您的支持完成...+1 快速回复
    【解决方案2】:

    /* * 将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;
           }
    
    }
    

    【讨论】:

      【解决方案3】:

      我通过以下代码成功将图片上传到 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);
      } 
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-12-02
        • 1970-01-01
        • 2016-02-29
        • 2011-10-05
        • 2016-01-14
        • 1970-01-01
        • 2012-05-30
        • 2014-06-27
        相关资源
        最近更新 更多