2016-07-26 34 views
0

https://player.vimeo.com/video/136004191/config努力,而I M得到錯誤來從VIMEO真正網址:Vimeo的Get請求405響應代碼錯誤

response code:405 
07-26 11:42:46.236 22054-22183/com.sample.samplevideoview W/System.err: java.io.FileNotFoundException: https://player.vimeo.com/video/136004191/config 
07-26 11:42:46.236 22054-22183/com.sample.samplevideoview W/System.err:  at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:238) 
07-26 11:42:46.236 22054-22183/com.sample.samplevideoview W/System.err:  at com.android.okhttp.internal.huc.DelegatingHttpsURLConnection.getInputStream(DelegatingHttpsURLConnection.java:210) 
07-26 11:42:46.236 22054-22183/com.sample.samplevideoview W/System.err:  at com.android.okhttp.internal.huc.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java) 
07-26 11:42:46.237 22054-22183/com.sample.samplevideoview W/System.err:  at com.sample.samplevideoview.AsyncHttpClient$AsyncDataRequestHideDialog.doInBackground(AsyncHttpClient.java:353) 
07-26 11:42:46.237 22054-22183/com.sample.samplevideoview W/System.err:  at com.sample.samplevideoview.AsyncHttpClient$AsyncDataRequestHideDialog.doInBackground(AsyncHttpClient.java:287) 
07-26 11:42:46.237 22054-22183/com.sample.samplevideoview W/System.err:  at android.os.AsyncTask$2.call(AsyncTask.java:295) 
07-26 11:42:46.237 22054-22183/com.sample.samplevideoview W/System.err:  at java.util.concurrent.FutureTask.run(FutureTask.java:237) 
07-26 11:42:46.237 22054-22183/com.sample.samplevideoview W/System.err:  at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234) 
07-26 11:42:46.237 22054-22183/com.sample.samplevideoview W/System.err:  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113) 
07-26 11:42:46.237 22054-22183/com.sample.samplevideoview W/System.err:  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588) 
07-26 11:42:46.237 22054-22183/com.sample.samplevideoview W/System.err:  at java.lang.Thread.run(Thread.java:818) 
07-26 11:42:46.281 22054-22054/com.sample.samplevideoview E/MainActivity: Must implement the interface java.lang.NullPointerException: Attempt to invoke virtual method 'com.sample.samplevideoview.Request com.sample.samplevideoview.VimeoResponse.getRequest()' on a null object reference 

這裏是代碼:

private void getRealUrl(String videoId) 
     { 
      AsyncHttpClient mAsyncHttpClient = new AsyncHttpClient(); 
      HashMap<String, String> params = new HashMap<>(); 
      String url = "https://player.vimeo.com/video/" + videoId + "/config"; 

      mAsyncHttpClient.postWithStringData(MainActivity.this, TAG, 
        url, StringConstants.METHOD_GET, params,false, 
        new AsyncHttpClient.AsyncHttpResponseCallBack() { 
         @Override 
         public void onResponse(String response) { 
          Gson gson = new GsonBuilder().create(); 
          VimeoResponse movie = gson.fromJson(response, VimeoResponse.class); 

         } 
        } 
     ); 
     } 
public class AsyncHttpClient { 

    public interface AsyncHttpResponseCallBack { 
     void onResponse(String response); 
    } 

    private Vector<Object> params; 
    private static final String UTF_ENCODING = "UTF-8"; 

    private static final int CONTEXT_INDEX = 0; 
    private static final int TAG_INDEX = 1; 
    private static final int URL_INDEX = 2; 
    private static final int PARAMS_STRING_INDEX = 3; 
    private static final int RESPONSE_CALLBACK_INDEX = 4; 
    private static final int REQUEST_METHOD_INDEX = 5; 
    private static final int SHOW_PROGRESS_DIALOG_INDEX = 6; 
public void postWithStringData(Context context, String TAG, String url, String method, 
            HashMap<String, String> hashMapParams, boolean showDialog, 
            AsyncHttpResponseCallBack asyncHttpResponseCallBack) { 
     if (Utilities.isConnected(context)) { 
      try { 
       params = new Vector<>(); 
       params.insertElementAt(context, CONTEXT_INDEX); 
       params.insertElementAt(TAG, TAG_INDEX); 
       params.insertElementAt(url, URL_INDEX); 
       params.insertElementAt(getPostDataString(hashMapParams), PARAMS_STRING_INDEX); 
       params.insertElementAt(asyncHttpResponseCallBack, RESPONSE_CALLBACK_INDEX); 
       params.insertElementAt(method, REQUEST_METHOD_INDEX); 
       new AsyncDataRequestHideDialog(context).execute(params); 
      } catch (UnsupportedEncodingException e) { 
       e.printStackTrace(); 
      } 
     } 
    } 
private class AsyncDataRequestHideDialog extends AsyncTask<Vector<Object>, Void, String> { 

     AlertDialog mAlert; 
     String TAG, url; 
     String paramsString; 
     AsyncHttpResponseCallBack asyncHttpResponseCallBack; 
     Context context; 

     String method; 
     public AsyncDataRequestHideDialog(Context context) { 
      // TODO Auto-generated constructor stub 
      this.context = context; 
     } 

     @Override 
     protected String doInBackground(Vector<Object>... params) { 
      Vector<Object> requestParams = params[0]; 
      TAG = (String) requestParams.get(TAG_INDEX); 
      url = (String) requestParams.get(URL_INDEX); 
      paramsString = (String) requestParams.get(PARAMS_STRING_INDEX); 
      asyncHttpResponseCallBack = (AsyncHttpResponseCallBack) requestParams.get(RESPONSE_CALLBACK_INDEX); 
      method = (String) requestParams.get(REQUEST_METHOD_INDEX); 

      String result = ""; 
      URL requestURL; 
      StringBuffer response; 

      try { 
       requestURL = new URL(url); 
       HttpURLConnection conn = (HttpURLConnection) requestURL.openConnection(); 
       conn.setReadTimeout(StringConstants.READ_TIMEOUT); 
       conn.setConnectTimeout(StringConstants.CONNECTION_TIMEOUT); 
       conn.setRequestMethod(method); 
       conn.setDoInput(true); 
       conn.setDoOutput(true); 
       OutputStream os = conn.getOutputStream(); 
       BufferedWriter writer = new BufferedWriter(
         new OutputStreamWriter(os, UTF_ENCODING)); 
       writer.write(paramsString); 
       writer.flush(); 
       writer.close(); 
       os.close(); 
       String line; 
       response = new StringBuffer(); 
       Log.d(TAG,"response code:"+conn.getResponseCode()); 
       BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream())); 
       while ((line = br.readLine()) != null) { 
        response.append(line); 
       } 
       result = response.toString(); 
      } catch (SocketTimeoutException e1) { 
       e1.printStackTrace(); 
      } catch (Exception e) { 
       e.printStackTrace(); 

      } finally { 
       Log.d(TAG, result); 
       return result; 
      } 
     } 

     // Overriding onPreExecute to initialize and show progress dialog 
     @Override 
     protected void onPreExecute() { 
      // TODO Auto-generated method stub 
      super.onPreExecute(); 

     } 
     @Override 
     protected void onPostExecute(String result) { 
      // TODO Auto-generated method stub 
      super.onPostExecute(result); 

      // If result is not null 
      if (result != null) { 
       try { 
        // Making a log just to make sure of data. 
        Log.e(TAG, result); 
        asyncHttpResponseCallBack.onResponse(result); 
       } catch (Exception e) { 
        Log.e(TAG, "Must implement the interface " + e.toString()); 
       } 
      } else { 
       mAlert = Utilities.createAlertDialog(context, "Error", 
         StringConstants.DATA_ERROR); 
      } 
     } 
    } 

而I M得到響應碼405?有什麼問題?移動和桌面瀏覽器中的相同網址對我進行響應。

+0

確保URL接受的方法是GET或它的PUSH –

+0

@GeetChoubey解釋請問 – Erum

+0

從哪裏可以找到它的GET或PUSH? – Erum

回答

0

您的代碼似乎有問題,因爲對於簡單的GET字符串請求OutputStreamBuffer類引起異常。試試這個簡單的代碼。在我身邊工作得很好。

@Override 
      protected String doInBackground(Vector<Object>... params) { 

       String result = ""; 
       url = "https://player.vimeo.com/video/136004191/config"; 

       try { 

        URL obj = new URL(url); 

        HttpURLConnection con = (HttpURLConnection) obj.openConnection(); 

        // optional default is GET 
        con.setRequestMethod("GET"); 
        BufferedReader in = new BufferedReader(
          new InputStreamReader(con.getInputStream())); 
        String inputLine; 
        StringBuffer response = new StringBuffer(); 

        while ((inputLine = in.readLine()) != null) { 
         response.append(inputLine); 
        } 
        in.close(); 

        //print result 
        System.out.println(response.toString()); 

        result = response.toString(); 
       } catch (SocketTimeoutException e1) { 
        e1.printStackTrace(); 
       } catch (Exception e) { 
        e.printStackTrace(); 

       } finally { 
        Log.d(TAG, result); 
        return result; 
       } 
      } 
1

我強烈建議使用官方vimeo-networking Java/Android庫來與Vimeo API交談。

該庫將照顧所有的網絡邏輯(所以你不需要HttpURLConnection樣板),它還提供通過URI獲取視頻的調用。

Here is how to request a single video。它本質上是這樣的:

String uri = ...;// the video uri; if you have a Video, this is video.uri 
VimeoClient.getInstance().fetchNetworkContent(uri, new ModelCallback<Video>(Video.class) { 
    @Override 
    public void success(Video video) { 
      // use the video 
    } 

    @Override 
    public void failure(VimeoError error) { 
      // voice the error 
    } 
}); 

然後,如果你自己的視頻,您可以訪問任何你想要的信息馬上在庫中Video對象。像video.files這樣的信息返回一個VideoFile,它可以讓你訪問你想要的鏈接。

+0

然後,如果您擁有該視頻,您可以訪問任何信息,我有我自己的帳戶vimeo和dnt有我自己的任何視頻setup.Moreover我只是有視頻鏈接,這是YouTube,dailymotion,VIMEO,所以我只需要使用它自己的SDK播放VIMO視頻,因爲我沒有從我的API響應獲得真正的URL – Erum

+0

使用API​​,你只能訪問'文件'如果您是上傳該視頻的人(使用PRO帳戶),則可以使用「視頻」對象。在網絡上,有一個「嵌入式播放器」,可讓您播放任何視頻,但截至目前,Android上沒有嵌入式播放器選項。請參考[這個鏈接](http://stackoverflow.com/questions/9030524/auto-playing-vimeo-videos-in-android-webview),其中涵蓋了使用「WebView」在Android上播放玩家播放網頁嵌入播放器。 –