我想从服务器

时间:2015-07-22 04:59:05

标签: android android-layout android-fragments android-intent android-activity

我希望当服务器以WebView的形式发送一些响应时,我的活动会立即刷新,因此WebView采用横幅广告的形式。 我为显示横幅广告编写代码,但广告仅在我重新创建活动时显示,即当我旋转屏幕然后显示横幅时,但是当它处于相同的静态模式时,横幅未显示。 所以,请让我知道我会做什么,以便当服务器立即给出一些响应时,它将显示在我的活动上。

void startDemo() {

    //Set Http Client Options
    final OptimusHTTP client = new OptimusHTTP();
    client.enableDebugging();
    client.setMethod(OptimusHTTP.METHOD_POST);
    client.setMode(OptimusHTTP.MODE_SEQ);


    FreqDetector_Goertzel.getInstance().startRecording(new FreqDetector_Goertzel.RecordTaskListener() {
        private String urlRedirect = "";
        private String imgSmallBanner = "";

        @Override
        public void onSuccess(int val)
        {
                String pSet = pVal.getPatternSet(val, 5);
                if (pSet != null) {
                    FreqDetector_Goertzel.getInstance().stopRecording();
                    EasyDeviceInfo deviceInfo = new EasyDeviceInfo(MainActivity.this);

                    final HashMap<String, String> device_params = new HashMap<>();
                    device_params.put("aid", deviceInfo.getAndroidID());
                    device_params.put("pattern", pSet);

                    if (isNetworkAvailable(MainActivity.this)) {
                        try {
                            client.makeRequest(MainActivity.this, new HttpReq(), Defaults.MATCHINGSERVER, device_params, new OptimusHTTP.ResponseListener() {
                                @Override
                                public void onSuccess(String s) {
                                    try {
                                        if (s != null && !s.contains("No Match Found"))

                                        {
                                            JSONObject jsonObject = null;
                                            jsonObject = new JSONObject(s);
                                            imgSmallBanner = Uri.decode(jsonObject.optString("smallImgUrl", "NA"));
                                            urlRedirect = Uri.decode(jsonObject.optString("redirectUrl", "NA"));
                                            loadAdvertisement(urlRedirect, imgSmallBanner);
                                        } else {
                                            //Did not match
                                            startDemo();
                                        }

                                    } catch (JSONException e) {
                                        e.printStackTrace();
                                    }

                                }

                                @Override
                                public void onFailure(String s) {

                                }
                            });
                        } catch (Exception e) {
                            e.printStackTrace();
                        }
                    } else {
                        //Internet not available. Do not do anything.
                    }
                }

        }

        @Override
        public void onFailure(String s) {
        }
    });
}

void loadAdvertisement(String clickUrl, String imgSmallName) {
    String click_url;
    String img_small_url;

    stopDemo();

    click_url = Uri.decode(Uri.encode(clickUrl));
    img_small_url = imgSmallName;

    StringBuilder htmlData2 = new StringBuilder();
    htmlData2.append("<html><body style='margin:0;padding:0;background-color:black;'><a href='").append(click_url).append("' ><img src='").append(img_small_url).append("' height=50 style='margin:0 auto;display:block;' /></a></body></html>");
    webView_img_small.loadDataWithBaseURL("file:///android_asset/", htmlData2.toString(), "text/html", "utf-8", null);
    webView_img_small.setVisibility(View.VISIBLE);
 /* What I will do here so when server sends response it will immediately being refreshed and shown on activity without recreating it.*/ }

2 个答案:

答案 0 :(得分:1)

在这里你可以找到一些回复:http://developer.android.com/guide/topics/ui/how-android-draws.html

对我来说,对invalidate()的调用只刷新视图并调用requestLayout()刷新视图并计算屏幕中视图的大小。

答案 1 :(得分:0)

您可以尝试使用Activity.recreate()。当您旋转设备时,此方法将破坏您当前的Activity并以相同的方式创建一个新的Activity 希望这会有所帮助。