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没有接收到数据,亦或者说是没进类中去执行获取数据的方法。


有大大能解决一下萌新的问题吗?
...全文
793 6 打赏 收藏 转发到动态 举报
写回复
用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
  • 打赏
  • 举报
回复
你获取的代码在哪写的,咋写的,贴出来看看

80,348

社区成员

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

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