2016-08-22 5 views
0

Я хочу играть в видео Vimeo, и я выполнил шаги в https://github.com/vimeo/vimeo-networking-java.Android Play Vimeo Video

Я использовал этот метод, чтобы получить объект Video, а затем загрузить его в WebView.

VimeoClient.getInstance().fetchNetworkContent(String uri, ModelCallback callback) 

Однако, когда я зарегистрировал результат, он, кажется, указывает, что он не работает.

Вот мои 2 файла Java.

MyVimeoApplication.java

import android.app.Application; 
import android.content.Context; 
import android.content.pm.PackageInfo; 
import android.content.pm.PackageManager; 
import android.os.Build; 
import android.util.Log; 

import com.vimeo.networking.Configuration; 
import com.vimeo.networking.Vimeo; 
import com.vimeo.networking.VimeoClient; 

public class MyVimeoApplication extends Application 
{ 
private static final String SCOPE = "private public interact"; 

private static final boolean IS_DEBUG_BUILD = false; 
// Switch to true to see how access token auth works. 
private static final boolean ACCESS_TOKEN_PROVIDED = false; 
private static Context mContext; 

@Override 
public void onCreate() 
{ 
    super.onCreate(); 
    mContext = this; 

    Configuration.Builder configBuilder; 
    // This check is just as for the example. In practice, you'd use one technique or the other. 
    if (ACCESS_TOKEN_PROVIDED) 
    { 
     configBuilder = getAccessTokenBuilder(); 
     Log.d("ACCESS_TOKEN", "PROVIDED"); 
    } 
    else 
    { 
     configBuilder = getClientIdAndClientSecretBuilder(); 
     Log.d("ACCESS_TOKEN", "NOT PROVIDED"); 
    } 
    if (IS_DEBUG_BUILD) { 
     // Disable cert pinning if debugging (so we can intercept packets) 
     configBuilder.enableCertPinning(false); 
     configBuilder.setLogLevel(Vimeo.LogLevel.VERBOSE); 
    } 
    VimeoClient.initialize(configBuilder.build()); 
} 

public Configuration.Builder getAccessTokenBuilder() { 
    // The values file is left out of git, so you'll have to provide your own access token 
    String accessToken = getString(R.string.access_token); 
    return new Configuration.Builder(accessToken); 
} 

public Configuration.Builder getClientIdAndClientSecretBuilder() { 
    // The values file is left out of git, so you'll have to provide your own id and secret 
    String clientId = getString(R.string.client_id); 
    String clientSecret = getString(R.string.client_secret); 
    String codeGrantRedirectUri = getString(R.string.deeplink_redirect_scheme) + "://" + 
      getString(R.string.deeplink_redirect_host); 
    Configuration.Builder configBuilder = 
      new Configuration.Builder(clientId, clientSecret, SCOPE, null, 
        null); 
//  configBuilder.setCacheDirectory(this.getCacheDir()) 
//    .setUserAgentString(getUserAgentString(this)).setDebugLogger(new NetworkingLogger()) 
//    // Used for oauth flow 
//    .setCodeGrantRedirectUri(codeGrantRedirectUri); 

    return configBuilder; 
} 

public static Context getAppContext() { 
    return mContext; 
} 

public static String getUserAgentString(Context context) { 
    String packageName = context.getPackageName(); 

    String version = "unknown"; 
    try { 
     PackageInfo pInfo = context.getPackageManager().getPackageInfo(packageName, 0); 
     version = pInfo.versionName; 
    } catch (PackageManager.NameNotFoundException e) { 
     System.out.println("Unable to get packageInfo: " + e.getMessage()); 
    } 

    String deviceManufacturer = Build.MANUFACTURER; 
    String deviceModel = Build.MODEL; 
    String deviceBrand = Build.BRAND; 

    String versionString = Build.VERSION.RELEASE; 
    String versionSDKString = String.valueOf(Build.VERSION.SDK_INT); 

    return packageName + " (" + deviceManufacturer + ", " + deviceModel + ", " + deviceBrand + 
      ", " + "Android " + versionString + "/" + versionSDKString + " Version " + version + 
      ")"; 
} 
} 

MainActivity.java

import android.app.ProgressDialog; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.util.Log; 
import android.webkit.WebView; 
import android.widget.Toast; 

import com.vimeo.networking.VimeoClient; 
import com.vimeo.networking.callbacks.AuthCallback; 
import com.vimeo.networking.callbacks.ModelCallback; 
import com.vimeo.networking.model.Video; 
import com.vimeo.networking.model.error.VimeoError; 

public class MainActivity extends AppCompatActivity 
{ 
private VimeoClient mApiClient = VimeoClient.getInstance(); 
private ProgressDialog mProgressDialog; 

@Override 
protected void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    mProgressDialog = new ProgressDialog(this); 
    mProgressDialog.setMessage("All of your API are belong to us..."); 

    // ---- Client Credentials Auth ---- 
    if (mApiClient.getVimeoAccount().getAccessToken() == null) { 
     // If there is no access token, fetch one on first app open 
     authenticateWithClientCredentials(); 
    } 
} 

// You can't make any requests to the api without an access token. This will get you a basic 
// "Client Credentials" gran which will allow you to make requests 
private void authenticateWithClientCredentials() { 
    mProgressDialog.show(); 
    mApiClient.authorizeWithClientCredentialsGrant(new AuthCallback() { 
     @Override 
     public void success() 
     { 
      Toast.makeText(MainActivity.this, "Client Credentials Authorization Success", Toast.LENGTH_SHORT).show(); 
      mProgressDialog.hide(); 

      mApiClient.fetchNetworkContent("https://vimeo.com/179708540", new ModelCallback<Video>(Video.class) 
      { 
       @Override 
       public void success(Video video) 
       { 
        // use the video 
        Log.d("VIDEO", "SUCCESS"); 
        String html = video.embed != null ? video.embed.html : null; 
        if(html != null) 
        { 
         // html is in the form "<iframe .... ></iframe>" 
         // load the html, for instance, if using a WebView on Android, you can perform the following: 
         WebView webview = (WebView) findViewById(R.id.webView); // obtain a handle to your webview 
         webview.loadData(html, "text/html", "utf-8"); 
        } 
       } 

       @Override 
       public void failure(VimeoError error) 
       { 
        Log.d("VIDEO", "FAIL"); 
        Toast.makeText(MainActivity.this, error.toString(), Toast.LENGTH_SHORT).show(); 
        // voice the error 
       } 
      }); 

     } 

     @Override 
     public void failure(VimeoError error) { 
      Toast.makeText(MainActivity.this, "Client Credentials Authorization Failure", Toast.LENGTH_SHORT).show(); 
      mProgressDialog.hide(); 
     } 
    }); 
} 
} 
+0

У вас есть результат. –

ответ

2

Проблема заключается в том, что вы пытаетесь использовать URL и тому Vimeo-сети библиотека ожидает URI.

У вас есть https://vimeo.com/179708540 - это веб-адрес, чтобы просмотреть видео на сайте Vimeo. Чтобы использовать библиотеку vimeo-networking, вы должны указать uri метода, который вы используете (в данном случае fetchNetworkContent); для видео в этом вопросе uri будет выглядеть как /videos/179708540. Затем библиотека vimeo-networking будет использовать этот uri для создания URL-адреса для подключения к Vimeo API - он будет выглядеть как https://api.vimeo.com/videos/179708540.

+0

Я получаю nullpointerexception, когда я заменяю url на «/ videos/179708540» –

+0

Я просто заменил код примера, найденный в библиотеке vimeo-networking, с помощью вашего блока authenticateWithClientCredentials выше (закомментируйте строки вашего веб-просмотра) - он работает без каких-либо исключений , Если вы испытываете исключение, было бы полезно, если бы вы точно указали, что происходит не так, или в этом случае, что является нулевым. –

+0

Я тоже не уверен, журнал ошибок не указывает на какие-либо конкретные строки. Только сейчас я сделал то же, что и вы, заменив блок authenticateWithClientCredentials примером в vimeo-networking, и нет ошибки, и я вижу, что веб-просмотр загружает данные. Однако я не могу воспроизвести видео, потому что он говорит, что технология устарела. –