WEEX 常见问题合集

1.android.os.FileUriExposedException

intent传递Uri内容过长
在你的Application中添加:
if (Build.VERSION.SDK_INT>=18) {
StrictMode.VmPolicy.Builder builder = new StrictMode.VmPolicy.Builder();
StrictMode.setVmPolicy(builder.build());
builder.detectFileUriExposure();
}

2.weex sdk版本

https://mvnrepository.com/artifact/com.taobao.android/weex_sdk?repo=jcenter

weex sdk 分apache和taobao两个包

我这里只发taobao的包,关于apache的地址,我从网上只能找到最新版本的sdk地址。

纠错:
今天发现apache下面的weexsdk包的包名是不一样的,有没有小伙伴遇到我的问题,已经哭晕。
apache/weex 的sdk_legacy 就是以taobao命名的包,之前都没有注意到,这操作太骚了!
在这里插入图片描述
在这里插入图片描述

3.weex 使用box-shadow 出现绘制问题

sdk版本:0.20.0.2
apache/incubator-weex 问题单号 #1648

解决办法:让其颜色与视图重叠部分保持一致,使用同一个色调,通过修改透明度,让颜色跟UI效果保持一致

4.初试EEUI热更新

【热更新文档】https://eeui.app/update/
【热更新管理后台】:https://console.eeui.app/#/manage/apps/update

这里面要说的是关于热更新补丁的问题:将dist目录下的所有文件打包,不包含dist目录

5.安装cnpm时没有权限

/usr/local 目录没有访问权限
修改npm包所安装目录的权限:

sudo chown -R $USER /usr/local 

然后输入密码就可以了
查看目录是否已切换权限:

ls -l /usr/local

接下来可以进行cnpm全局包安装:

npm install -g cnpm --registry=https://registry.npm.taobao.org
5.关于EEUI中android 的stream module不支持put,delete方式body传值

这里要强调一下,这个问题不是eeui的问题,而是weex sdk的问题,eeui是对weex sdk 的二次开发封装。
这里可以通过WEEX SDK 提供的setHttpAdapter替换方案解决

1.在eeui的framework所在模块的build文件下添加依赖:

   api ('com.github.zjutkz:Weex-OkHttp-Adapter:1.1'){
   //这个库以前的sdk版本是0.10.0太旧了不用了
        exclude group: 'com.taobao.android'
        exclude group: 'com.squareup.okhttp3'
    }

2.OkHttpAdapter.java

package app.eeui.framework.extend.adapter;

import android.text.TextUtils;

import com.taobao.weex.adapter.IWXHttpAdapter;
import com.taobao.weex.common.WXRequest;
import com.taobao.weex.common.WXResponse;
import com.zjutkz.progress.IncrementaRequestBody;
import com.zjutkz.progress.IncrementalResponseBody;
import com.zjutkz.progress.listener.RequestListener;
import com.zjutkz.progress.listener.ResponseListener;
import com.zjutkz.utils.Assert;

import java.io.IOException;
import java.util.Set;

import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.Headers;
import okhttp3.Interceptor;
import okhttp3.MediaType;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;

public class OkHttpAdapter implements IWXHttpAdapter {

    private static final String METHOD_GET = "GET";
    private static final String METHOD_POST = "POST";

    public static final int REQUEST_FAILURE = -100;

    @Override
    public void sendRequest(final WXRequest request, final OnHttpListener listener) {
        if (listener != null) {
            listener.onHttpStart();
        }

        RequestListener requestListener = new RequestListener() {
            @Override
            public void onRequest(long consumed, long total, boolean done) {
                if (Assert.checkNull(listener)) {
                    listener.onHttpUploadProgress((int) (consumed));
                }
            }
        };

        final ResponseListener responseListener = new ResponseListener() {
            @Override
            public void onResponse(long consumed, long total, boolean done) {
                if (Assert.checkNull(listener)) {
                    listener.onHttpResponseProgress((int) (consumed));
                }
            }
        };

        OkHttpClient client = new OkHttpClient.Builder()
                .addInterceptor(new Interceptor() {
                    @Override
                    public Response intercept(Interceptor.Chain chain) throws IOException {
                        Response originalResponse = chain.proceed(chain.request());
                        return originalResponse.newBuilder()
                                .body(new IncrementalResponseBody(originalResponse.body(), responseListener))
                                .build();
                    }
                })
                .build();
        Request okHttpRequest;
        if (METHOD_GET.equalsIgnoreCase(request.method)) {
            okHttpRequest = new Request.Builder()
                    .headers(AddHeaders(request))
                    .url(request.url)
                    .get()
                    .build();
        } else if (METHOD_POST.equalsIgnoreCase(request.method)) {
            okHttpRequest = new Request.Builder()
                    .headers(AddHeaders(request))
                    .url(request.url)
                    .post(new IncrementaRequestBody(RequestBody.create(MediaType.parse(request.body), request.body), requestListener))
                    .build();
        } else if (!TextUtils.isEmpty(request.method)) {
            okHttpRequest = new Request.Builder()
                    .headers(AddHeaders(request))
                    .url(request.url)
                    .method(request.method, new IncrementaRequestBody(RequestBody.create(MediaType.parse(request.body), request.body), requestListener))
                    .build();
        } else {
            okHttpRequest = new Request.Builder()
                    .headers(AddHeaders(request))
                    .get()
                    .url(request.url)
                    .build();
        }
        client.newCall(okHttpRequest).enqueue(CommonCallBack(listener));
    }

    private boolean requestSuccess(int statusCode) {
        return statusCode >= 200 && statusCode <= 299;
    }

    private Headers AddHeaders(WXRequest request) {
        Headers.Builder builder = new Headers.Builder();
        if (request.paramMap != null) {
            Set<String> keySets = request.paramMap.keySet();
            for (String key : keySets) {
                builder.add(key, request.paramMap.get(key));
            }
        }
        return builder.build();
    }

    private Callback CommonCallBack(final OnHttpListener listener) {
        return new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                if (Assert.checkNull(listener)) {
                    WXResponse wxResponse = new WXResponse();
                    wxResponse.errorCode = String.valueOf(REQUEST_FAILURE);
                    wxResponse.statusCode = String.valueOf(REQUEST_FAILURE);
                    wxResponse.errorMsg = e.getMessage();
                }
            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
                if (Assert.checkNull(listener)) {

                    WXResponse wxResponse = new WXResponse();
                    wxResponse.statusCode = String.valueOf(response.code());
                    if (requestSuccess(Integer.parseInt(wxResponse.statusCode))) {
                        wxResponse.originalData = response.body().bytes();
                    } else {
                        wxResponse.errorCode = String.valueOf(response.code());
                        wxResponse.errorMsg = response.body().string();
                    }

                    listener.onHttpFinish(wxResponse);
                }
            }
        };
    }
}

3.在eeui.java 的175行添加

   Builder mBuilder = new Builder();
        mBuilder.setImgAdapter(new ImageAdapter());
        mBuilder.setHttpAdapter(new OkHttpAdapter());//添加这行代码
        mBuilder.setDrawableLoader(new DrawableLoader(app));
        WXSDKEngine.initialize(application, mBuilder.build());
6.从Welcome页面跳转到Page页面,状态栏字体颜色修改

在这里插入图片描述
修改状态栏字体颜色

未完待续

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值