Android 加载Weex页面的简单使用
哇,真滴是,好饿,早上没吃饭真不行,饿的代码都没心情写了
今天简单的总结一下怎么加载weex页面(前提是你的weex SDK集成好了)
加载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);
}
上面这个是封装了一下,然后直接调方法名就行,怎么使用我也写了出来。
如果加载不出来页面的话,你需要换个weex SDK的依赖了
可以把第一个依赖换成
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 }
新手总结,希望对大家有帮助!!!