APP如何把服务端返回的JSP源码渲染出来。

Lambert_L 2018-10-18 05:07:30
目前使用new一个Intent类来实现把数据传到自己封装的activity类中。
发送信息的方法是intent.putExtra方法传数据给接受类,接着用activity.startActivity(intent);的方法来新建activity。
实现代码
intent.putExtra("url", message);
自己封装的activity类中new了WebView类——SysdkH5WebView。

SysdkH5WebView类中会通过上面的"url"来获取服务端返回给客户端的jsp源码,定义了String viewUrl赋值

并用了webView.loadDataWithBaseURL(null,viewUrl, "text/html", "utf-8", null);打印渲染。



运行结果:
代码走过了intent.putExtra方法,但是SysdkH5WebView没有接收到数据,亦或者说是没进类中去执行获取数据的方法。


有大大能解决一下萌新的问题吗?
...全文
806 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Lambert_L 2018-10-22
  • 打赏
  • 举报
回复
两个方法不一样。我已经解决了问题了。
Lambert_L 2018-10-19
  • 打赏
  • 举报
回复
服务端返回的JSP源码我确定是拿到了的。打印出来了。但并未有进到创建activity类中。项目的xml没有添加过该activity,因为我不知道只写生成的activity代码就能显示了。
Lambert_L 2018-10-19
  • 打赏
  • 举报
回复
SysdkH5WebView类
package com.sy.sdk;

import java.util.List;

import android.app.Activity;
import android.app.ProgressDialog;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.res.Configuration;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Bundle;
import android.text.TextUtils;
import android.util.Log;
import android.view.KeyEvent;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.webkit.JavascriptInterface;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.LinearLayout;
import android.widget.Toast;


public class SysdkH5WebView extends Activity {
private ProgressDialog h5ProgressDialog;
private WebView h5WebView;
private Context context;
private String viewUrl = "";
private static final String SUCCESS = "200";
private static final String FAIL = "201";
private static final String WXTYPE = "13";
private static final String ALTYPE = "12";
private String type;
protected SyCallbackListener<String> listener= null;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
Intent intent = getIntent();
if (intent != null) {
viewUrl = intent.getStringExtra("url");
}
Log.i("sysdk", viewUrl);
LinearLayout layout = CreateLayout();
setContentView(layout);
context = this;

WebSettings settings = h5WebView.getSettings();
settings.setUseWideViewPort(true);
settings.setDefaultTextEncodingName("UTF-8");
settings.setJavaScriptEnabled(true);
settings.setJavaScriptCanOpenWindowsAutomatically(true);
settings.setCacheMode(WebSettings.LOAD_NO_CACHE);
settings.setDomStorageEnabled(true);


h5WebView.addJavascriptInterface(new JsInterface(this), "webview");
h5WebView.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);
h5WebView.requestFocus();
h5WebView.setWebChromeClient(webChrome);
h5WebView.setWebViewClient(webClient);
loadData();
}


/**
* 加载HTML代码的
*/
private void loadData(){
if (h5WebView != null && !viewUrl.equals("")) {
h5WebView.loadData(viewUrl, "text/html", "UTF-8");
h5ProgressDialog = ProgressDialog.show(this, null, "正在加载...");
h5WebView.reload();
} else {
Toast.makeText(this, "请求失败,请检查网络状况", Toast.LENGTH_LONG).show();
finish();
}
}

private LinearLayout CreateLayout() {

LinearLayout layout = new LinearLayout(this);
LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,
LinearLayout.LayoutParams.MATCH_PARENT);
layout.setLayoutParams(layoutParams);

h5WebView = new WebView(this);
h5WebView.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT));
layout.addView(h5WebView);
return layout;
}

WebChromeClient webChrome = new WebChromeClient() {
@Override
public void onProgressChanged(WebView view, int newProgress) {
super.onProgressChanged(view, newProgress);
}

@Override
public void onReceivedTitle(WebView view, String title) {
super.onReceivedTitle(view, title);
}
};

WebViewClient webClient = new WebViewClient() {

@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {

if (url.startsWith("weixin://wap/pay?")) {
if (type.equals(WXTYPE) && !isWxAppInstalled()) {
if (h5WebView.canGoBack()) {
h5WebView.goBack();
}
}else{
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
startActivity(intent);
}
return true;
}else if (url.startsWith("alipays://platformapi/startApp?")) {
boolean aliInstalled = checkAliPayInstalled(context);
if (aliInstalled) {
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
startActivity(intent);
return true;
} else {
Toast.makeText(context, "支付宝未安装", Toast.LENGTH_SHORT).show();
}
}
return super.shouldOverrideUrlLoading(view, url);
}

@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
super.onPageStarted(view, url, favicon);
if (!h5ProgressDialog.isShowing()) {
h5ProgressDialog = ProgressDialog.show(context, null, "正在加载...");
}
}

@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
if (h5ProgressDialog.isShowing()) {
h5ProgressDialog.dismiss();
}
}
};


private boolean isWxAppInstalled(){
final PackageManager packageManager = context.getPackageManager();
List<PackageInfo> pinfo= packageManager.getInstalledPackages(0);
for(int i=0;i < pinfo.size();i++){
String pn = pinfo.get(i).packageName;
if(pn.equals("com.tencent.mm")){
return true;
}
}
return false;
}

private boolean checkAliPayInstalled(Context context){
Uri uri = Uri.parse("alipays://platformapi/startApp?");
Intent intent = new Intent(Intent.ACTION_VIEW,uri);
ComponentName componentnName = intent.resolveActivity(context.getPackageManager());
return componentnName !=null;
}

public class JsInterface {

Context myContext;

public JsInterface(Context context) {
myContext = context;
}

@JavascriptInterface
public void callback(String code, String result) {
if (code.equals(SUCCESS)) {
listener.callback(SyStatusCode.PAY_SUCCESS, TextUtils.isEmpty(result) ? "支付成功" : result);
} else if (code.equals(FAIL)) {
listener.callback(SyStatusCode.PAY_FAIL, TextUtils.isEmpty(result) ? "支付失败" : result);
}
Toast.makeText(myContext, result + "||" + code, Toast.LENGTH_LONG).show();
finish();
}

@JavascriptInterface
public void type(String chooseType) {
if (!chooseType.equals("")) {
type = chooseType;
}else{
return;
}
if (type.equals(WXTYPE) && !isWxAppInstalled()) {
Toast.makeText(context, "微信未安装", Toast.LENGTH_SHORT).show();
}

}

@JavascriptInterface
public void back() {
listener.callback(SyStatusCode.PAY_CANCEL, "支付取消");
finish();
}
}

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
if (type != null && type.equals(ALTYPE)) {
listener.callback(SyStatusCode.PAY_CANCEL, "支付取消");
return super.onKeyDown(keyCode, event);
}
}
return false;
}

@Override
protected void onResume() {
super.onResume();
/*if(!TextUtils.isEmpty(type)&&type.equals(WXTYPE)){
h5WebView.loadUrl("javascript:wxFinished()");
}*/
}

@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
loadData();
}

@Override
protected void onDestroy() {
super.onDestroy();
clearWebData();
}

private void clearWebData() {
h5WebView.setWebChromeClient(null);
h5WebView.setWebViewClient(null);
h5WebView.getSettings().setJavaScriptEnabled(false);
h5WebView.clearCache(true);
try {
deleteDatabase("webview.db");
deleteDatabase("webviewCache.db");
} catch (Exception e) {
e.printStackTrace();
}
}

}
Lambert_L 2018-10-19
  • 打赏
  • 举报
回复
接收服务端返回的JSP源码并把数据传给SysdkH5WebView类
Intent intent = new Intent(activity, SysdkH5WebView.class);
intent.putExtra("url", message);
activity.startActivity(intent);
0萌萌哒0 2018-10-19
  • 打赏
  • 举报
回复
loadData方法里面把
h5WebView.loadData(viewUrl, "text/html", "UTF-8");
改成
h5WebView.loadUrl(viewUrl);
0萌萌哒0 2018-10-18
  • 打赏
  • 举报
回复
你获取的代码在哪写的,咋写的,贴出来看看
Spring4GWT GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java.applet.Applet 简单实现!~ 网页表格组件 GWT Advanced Table GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag Library 该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以直接在你的网页里面显示搜查的结果。 github-java-api github-java-api 是 Github 网站 API 的 Java 语言版本。 java缓存工具 SimpleCache SimpleCache 是一个简单易用的java缓存工具,用来简化缓存代码的编写,让你摆脱单调乏味的重复工作!1. 完全透明的缓存支持,对业务代码零侵入 2. 支持使用Redis和Memcached作为后端缓存。3. 支持缓存数据分区规则的定义 4. 使用redis作缓存时,支持list类型的高级数据结构,更适合论坛帖子列表这种类型的数据 5. 支持混合使用redis缓存和memcached缓存。可以将列表数据缓存到redis中,其他kv结构数据继续缓存到memcached 6. 支持redis的主从集群,可以做读写分离。缓存读取自redis的slave节点,写入到redis的master节点。 Java对象的SQL接口 JoSQL JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips AutoTips是为解决应用系统对于【自动提示】的需要(如:Google搜索), 而开发的架构无关的公共控件, 以满足该类需求可以通过快速配置来开发。AutoTips基于搜索引擎Apache Lucene实现。AutoTips提供统一UI。 WAP浏览器 j2wap j2wap 是一个基于Java的WAP浏览器,目前处于BETA测试阶段。它支持WAP 1.2规范,除了WTLS 和WBMP。 Java注册表操作类 jared jared是一个用来操作Windows注册表的 Java 类库,你可以用来对注册表信息进行读写。 GIF动画制作工具 GiftedMotion GiftedMotion是一个很小的,免费而且易于使用图像互换格式动画是能够设计一个有趣的动画了一系列的数字图像。使用简便和直截了当,用户只需要加载的图片和调整帧您想要的,如位置,时间显示和处理方法前帧。 Java的PList类库 Blister Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用程序)。 重复文件检查工具 FindDup.tar FindDup 是一个简单易用的工具,用来检查计算机上重复的文件。 OpenID的Java客户端 JOpenID JOpenID是一个轻量级的OpenID 2.0 Java客户端,仅50KB+(含源代码),允许任何Web网站通过OpenID支持用户直接登录而无需注册,例如Google Account或Yahoo Account。 JActor的文件持久化组件 JFile JFile 是 JActor 的文件持久化组件,以及一个高吞吐量的可靠事务日志组件。 Google地图JSP标签库 利用Google:maps JSP标签库就能够在你的Web站点上实现GoogleMaps的所有功能而且不需要javascript或AJAX编程。它还能够与JSTL相结合生成数据库驱动的动态Maps。 OAuth 实现框架 Agorava Agorava 是一个实现了 OAuth 1.0a 和 OAuth 2.0 的框架,提供了简单的方式通过社交媒体进行身份认证的功能。 Eclipse的JavaScript插件 JSEditor JSEditor 是 Eclipse 下编辑 JavaScript 源码的插件,提供语法高亮以及一些通用的面向对象方法。 Java数据库连接池 BoneCP BoneCP 是一个高性能的开源java数据库连接池实现库。它的设计初衷就是为了提高数据库连接池的性能,根据某些测试数据发现,BoneCP是最快的连接池。BoneCP很小,只有四十几K
Spring4GWT GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java.applet.Applet 简单实现!~ 网页表格组件 GWT Advanced Table GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag Library 该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以直接在你的网页里面显示搜查的结果。 github-java-api github-java-api 是 Github 网站 API 的 Java 语言版本。 java缓存工具 SimpleCache SimpleCache 是一个简单易用的java缓存工具,用来简化缓存代码的编写,让你摆脱单调乏味的重复工作!1. 完全透明的缓存支持,对业务代码零侵入 2. 支持使用Redis和Memcached作为后端缓存。3. 支持缓存数据分区规则的定义 4. 使用redis作缓存时,支持list类型的高级数据结构,更适合论坛帖子列表这种类型的数据 5. 支持混合使用redis缓存和memcached缓存。可以将列表数据缓存到redis中,其他kv结构数据继续缓存到memcached 6. 支持redis的主从集群,可以做读写分离。缓存读取自redis的slave节点,写入到redis的master节点。 Java对象的SQL接口 JoSQL JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips AutoTips是为解决应用系统对于【自动提示】的需要(如:Google搜索), 而开发的架构无关的公共控件, 以满足该类需求可以通过快速配置来开发。AutoTips基于搜索引擎Apache Lucene实现。AutoTips提供统一UI。 WAP浏览器 j2wap j2wap 是一个基于Java的WAP浏览器,目前处于BETA测试阶段。它支持WAP 1.2规范,除了WTLS 和WBMP。 Java注册表操作类 jared jared是一个用来操作Windows注册表的 Java 类库,你可以用来对注册表信息进行读写。 GIF动画制作工具 GiftedMotion GiftedMotion是一个很小的,免费而且易于使用图像互换格式动画是能够设计一个有趣的动画了一系列的数字图像。使用简便和直截了当,用户只需要加载的图片和调整帧您想要的,如位置,时间显示和处理方法前帧。 Java的PList类库 Blister Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用程序)。 重复文件检查工具 FindDup.tar FindDup 是一个简单易用的工具,用来检查计算机上重复的文件。 OpenID的Java客户端 JOpenID JOpenID是一个轻量级的OpenID 2.0 Java客户端,仅50KB+(含源代码),允许任何Web网站通过OpenID支持用户直接登录而无需注册,例如Google Account或Yahoo Account。 JActor的文件持久化组件 JFile JFile 是 JActor 的文件持久化组件,以及一个高吞吐量的可靠事务日志组件。 Google地图JSP标签库 利用Google:maps JSP标签库就能够在你的Web站点上实现GoogleMaps的所有功能而且不需要javascript或AJAX编程。它还能够与JSTL相结合生成数据库驱动的动态Maps。 OAuth 实现框架 Agorava Agorava 是一个实现了 OAuth 1.0a 和 OAuth 2.0 的框架,提供了简单的方式通过社交媒体进行身份认证的功能。 Eclipse的JavaScript插件 JSEditor JSEditor 是 Eclipse 下编辑 JavaScript 源码的插件,提供语法高亮以及一些通用的面向对象方法。 Java数据库连接池 BoneCP BoneCP 是一个高性能的开源java数据库连接池实现库。它的设计初衷就是为了提高数据库连接池的性能,根据某些测试数据发现,BoneCP是最快的连接池。BoneCP很小,只有四十几K

80,472

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧