Android 加载Weex页面的简单使用

哇,真滴是,好饿,早上没吃饭真不行,饿的代码都没心情写了

Android 加载Weex页面的简单使用

今天简单的总结一下怎么加载weex页面(前提是你的weex  SDK集成好了)

加载weex分为两种情况,一种是加载本地,一种是加载网络,首先我们先看下加载本地资源吧,

先按照我下面的来做,如果加载不出来的话,我下面会有解决方案!!!

Android 加载Weex页面的简单使用

首先,你可以随便建个类,然后在你的这个类的布局文件中写个载体,比如

FrameLayout,然后在重写的onViewCreated方法中addview就行,这个在fragment中加载的话用的多,我下面的加载没有使用这个,而是直接加载的!!!

import android.support.v7.app.AppCompatActivity;

import android.os.Bundle;

import android.view.View;

 

import com.taobao.weex.IWXRenderListener;

import com.taobao.weex.WXSDKInstance;

import com.taobao.weex.common.WXRenderStrategy;

import com.taobao.weex.utils.WXFileUtils;

 

/**

* 本地加载

*/

public class BenDiActivity extends AppCompatActivity implements IWXRenderListener{

private WXSDKInstance mWXSDKInstance;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_ben_di);

mWXSDKInstance = new WXSDKInstance(this);

mWXSDKInstance.registerRenderListener(this);

//加载本地   把你的home.js文件放在assets文件夹下面,那个home.js就是weex打包好后给你的js文件

//WXSample这个就是一个标识,你随便写也可以的

mWXSDKInstance.render("WXSample", WXFileUtils.loadAsset("home.js",this), null, null, WXRenderStrategy.APPEND_ASYNC);

}

 

@Override

public void onViewCreated(WXSDKInstance wxsdkInstance, View view) {

setContentView(view);

}

 

@Override

public void onRenderSuccess(WXSDKInstance wxsdkInstance, int i, int i1) {

 

}

 

@Override

public void onRefreshSuccess(WXSDKInstance wxsdkInstance, int i, int i1) {

 

}

 

@Override

public void onException(WXSDKInstance wxsdkInstance, String s, String s1) {

 

}

@Override

protected void onStart() {

super.onStart();

if (mWXSDKInstance != null) {

mWXSDKInstance.onActivityStart();

}

}

 

@Override

protected void onResume() {

super.onResume();

if (mWXSDKInstance != null) {

mWXSDKInstance.onActivityResume();

}

}

 

@Override

protected void onPause() {

super.onPause();

if (mWXSDKInstance != null) {

mWXSDKInstance.onActivityPause();

}

}

 

@Override

protected void onStop() {

super.onStop();

if (mWXSDKInstance != null) {

mWXSDKInstance.onActivityStop();

}

}

 

@Override

protected void onDestroy() {

super.onDestroy();

if (mWXSDKInstance != null) {

mWXSDKInstance.onActivityDestroy();

}

}

}

接下来就是加载网络了,加载网络的话是不需要本地文件了,

import android.support.v7.app.AppCompatActivity;

import android.os.Bundle;

import android.view.View;

 

import com.taobao.weex.IWXRenderListener;

import com.taobao.weex.WXSDKInstance;

import com.taobao.weex.common.WXRenderStrategy;

 

/**

* 网络获取

*/

public class WangLuoActivity extends AppCompatActivity implements IWXRenderListener{

private WXSDKInstance mWXSDKInstance;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_wang_luo);

mWXSDKInstance = new WXSDKInstance(this);

mWXSDKInstance.registerRenderListener(this);

mWXSDKInstance.renderByUrl("HongKong","http://103.255.95.212/test/tabbar.js",null, null, -1, -1, WXRenderStrategy.APPEND_ASYNC);

}

 

@Override

public void onViewCreated(WXSDKInstance wxsdkInstance, View view) {

setContentView(view);

}

 

@Override

public void onRenderSuccess(WXSDKInstance wxsdkInstance, int i, int i1) {

 

}

 

@Override

public void onRefreshSuccess(WXSDKInstance wxsdkInstance, int i, int i1) {

 

}

 

@Override

public void onException(WXSDKInstance wxsdkInstance, String s, String s1) {

 

}

@Override

protected void onStart() {

super.onStart();

if (mWXSDKInstance != null) {

mWXSDKInstance.onActivityStart();

}

}

 

@Override

protected void onResume() {

super.onResume();

if (mWXSDKInstance != null) {

mWXSDKInstance.onActivityResume();

}

}

 

@Override

protected void onPause() {

super.onPause();

if (mWXSDKInstance != null) {

mWXSDKInstance.onActivityPause();

}

}

 

@Override

protected void onStop() {

super.onStop();

if (mWXSDKInstance != null) {

mWXSDKInstance.onActivityStop();

}

}

 

@Override

protected void onDestroy() {

super.onDestroy();

if (mWXSDKInstance != null) {

mWXSDKInstance.onActivityDestroy();

}

}

}

好了,以上就是加载weex的两种方式了,你们还要注意的就是需要写一个加载图片的类才能加载出来,我之前写过了,这里就不重复写了,

总结一下加载方式:

//使用

renderPageByURL("http://publish-poc.emas-ha.cn/app/22-44/four",null);

renderPage(WXFileUtils.loadAsset("home.js", getContext()), "",null);

//加载网络资源url

protected void renderPageByURL(String url, String jsonInitData) {

Map<String, Object> options = new HashMap<>();

options.put(WXSDKInstance.BUNDLE_URL, url);

mWXSDKInstance.setTrackComponent(true);

//重点是这个方法

mWXSDKInstance.renderByUrl(

url,

url,

options,

jsonInitData,

WXRenderStrategy.APPEND_ASYNC);

}

//加载本地资源

protected void renderPage(String template, String source, String jsonInitData) {

Map<String, Object> options = new HashMap<>();

options.put(WXSDKInstance.BUNDLE_URL, source);

try {

String banner = WXUtils.getBundleBanner(template);

JSONObject jsonObj = JSONObject.parseObject(banner);

String digest = null;

if (jsonObj != null) {

digest = jsonObj.getString(Constants.CodeCache.BANNER_DIGEST);

}

if (digest != null) {

options.put(Constants.CodeCache.DIGEST, digest);

}

} catch (Throwable t) {

}

//Set options.codeCachePath

String path = WXEnvironment.getFilesDir(getActivity().getApplicationContext());

path += File.separator;

path += Constants.CodeCache.SAVE_PATH;

path += File.separator;

options.put(Constants.CodeCache.PATH, path);

mWXSDKInstance.setTrackComponent(true);

//重点是这个方法

mWXSDKInstance.render(

template,

template,

options,

jsonInitData,

WXRenderStrategy.APPEND_ASYNC);

}

上面这个是封装了一下,然后直接调方法名就行,怎么使用我也写了出来。

Android 加载Weex页面的简单使用

如果加载不出来页面的话,你需要换个weex  SDK的依赖了

Android 加载Weex页面的简单使用

可以把第一个依赖换成

compile('com.taobao.android:weex_sdk:0.18.15.65') { transitive true }

我当时自己写着玩的时候是可以的,然后加到项目中就加载不出来了,然后我换了依赖就好了,

如果你的还不行,你可以试试下面的依赖:

compile("com.taobao.android:weex_sdk:0.18.15.17") { transitive true }

compile("com.taobao.android:weex_sdk:0.18.15.1") { transitive true }

Android 加载Weex页面的简单使用

新手总结,希望对大家有帮助!!!