小编Ang*_*elo的帖子

如何正确扩展C++中的类并编写其头文件?

注意:我已经编辑了我的旧问题,尽可能清楚.

我有一个名为的第三方库person.lib及其标题person.h.这是我的实际项目结构,它编译和运行完美.

实际结构:

main.cpp中

#include <iostream>
#include <time.h>
#include <ctype.h>
#include <string>
#include "person.h"
using namespace person;
using namespace std;

class Client : public Person 
{
    public:
        Client();   
        void onMessage(const char * const);
    private:
        void gen_random(char*, const int);
};

Client::Client() {
    char str[11];
    gen_random(str, 10);
    this->setName(str);
}

void Client::onMessage(const char * const message) throw(Exception &) 
{
    cout << message << endl;
}

void Client::gen_random(char *s, const int len) {
    //THIS FUNCTION GENERATES A RANDOM NAME WITH …
Run Code Online (Sandbox Code Playgroud)

c++ compilation header

10
推荐指数
2
解决办法
7万
查看次数

HTMLUnit:更改用户代理字符串

我在我的Java项目中使用HtmlUnit来测试一个内部有Javascript的网页.我的代码点击一个调用Javascript函数的按钮,将用户重定向到另一个页面(如链接缩短服务).这是代码:

public void click()
{
    WebClient webClient = new WebClient();
    HtmlPage page = webClient.getPage("http://mywebsite.com");
    HtmlImage a = page.getHtmlElementById("my_button");
    page = (HtmlPage) a.click();
}
Run Code Online (Sandbox Code Playgroud)

问题是HTMLUnit使用默认的用户代理(Internet Explorer 8),只有少数设置(Firefox 17和Chrome).如果检测到另一个浏览器/用户代理,mywebsite.com的行为不会更改.顺便说一下,网站存储用户代理字符串用于统计目的,每次访问时我都需要更改它.

我试图通过BrowserVersion以这种方式创建一个新对象来更改用户代理:

BrowserVersion bv = new BrowserVersion("Chrome", "Mozilla/5.0", "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1468.0 Safari/537.36", 28);
Run Code Online (Sandbox Code Playgroud)

顺便说一句,当我实例化传递我的bv对象的Webclient 对象时,我的代码不再起作用了.根据我的理解,HtmlUnit文档说我必须检查我的BrowserVersion中指定的用户代理是否具有运行Javascript的正确功能.

但是,请注意常量不足以完全自定义浏览器,您还需要查看BrowserVersionFeatures和"javascript"包中的类.

这是什么意思?为什么HtmlUnit不再起作用?我的目标只是更改用户代理字符串.我怎样才能做到这一点?请注意,我也尝试过Selenium,但没有成功.谢谢您的帮助.

编辑1:

找到了这个技巧.如果我实例化BrowserVersion如下:

BrowserVersion bv = new BrowserVersion("Netscape", "blablabla", "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1468.0 Safari/537.36", 0);
Run Code Online (Sandbox Code Playgroud)

它有效,但我不明白为什么.我必须将第一个字符串设置为Netscape(尝试过Chrome和Mozilla,但它不起作用).第二个字符串是随机的,如果将Netscape设置为第一个参数,我可以放任何东西.第三个字符串是格式良好的用户代理,第四个参数是指示版本的整数.你能解释一下为什么它只Netscape作为第一个参数传递并随机传递给其他人(第二个除外)吗?

更新:

有时它不起作用(如上所述).对于某些用户代理字符串,页面未正确加载.我无法理解为什么用户代理应该修改HtmlUnit的行为,因为我很确定Javascript非常简单并且应该由所有浏览器版本运行.所以,我的最后一个问题是:如何在不改变执行Javascript时的行为的情况下更改HtmlUnit中的用户代理字符串?

javascript user-agent htmlunit

7
推荐指数
1
解决办法
8800
查看次数

如何从自定义ListView中的PopupMenu获取项目的位置

这是问题:我有一个自定义的ArrayAdapter(覆盖getView).每个项目都有

  • 2 ImageView
  • 2 EditText

其中一个ImageView是可点击的并启用了PopupMenu,所以我为列表的每个项目都有一个PopupMenu.现在,对于那个菜单,我需要从项目到锚定的一些参数.那么,如何将信息(如位置)传递给从PopupMenu语音调用的方法?附上了xml文件.

item_list.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:paddingBottom="5dp"
    android:paddingTop="5dp" >

    <ImageView
        android:id="@+id/icon"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_vertical"
        android:layout_marginRight="6dip"
        android:contentDescription="TODO"
        android:src="@drawable/ic_launcher" />

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical" >

        <TextView
            android:id="@+id/firstLine"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:gravity="center_vertical"
            android:maxHeight="60dp"
            android:text="Title"
            android:textSize="16sp" />

        <ImageView
            android:id="@+id/imageView1"
            android:layout_width="25dp"
            android:layout_height="25dp"
            android:layout_alignParentRight="true"
            android:layout_alignParentTop="true"
            android:contentDescription="TODO"
            android:onClick="showMenu"
            android:src="@drawable/abc_ic_menu_moreoverflow_normal_holo_light" />

        <TextView
            android:id="@+id/secondLine"
            android:layout_width="fill_parent"
            android:layout_height="26dip"
            android:layout_alignParentLeft="true"
            android:layout_below="@+id/firstLine"
            android:ellipsize="marquee"
            android:singleLine="true"
            android:text="Author"
            android:textSize="12sp" />

    </RelativeLayout>

</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

menu_item.xml

<?xml version="1.0" encoding="utf-8"?>
    <menu xmlns:android="http://schemas.android.com/apk/res/android" >

        <item
            android:id="@+id/preview"
            android:onClick="preview"
            android:title="@string/preview"/>
        <item
            android:id="@+id/download"
            android:onClick="download"
            android:title="@string/download"/>

    </menu> …
Run Code Online (Sandbox Code Playgroud)

xml android listview popupmenu

7
推荐指数
2
解决办法
9106
查看次数

这是什么类型的Java构造函数调用?

我从来没有遇到过这样的事情,我不知道这种类型的编码!这是什么?(我对Java很新)

DefaultHandler handler = new DefaultHandler() {

            boolean bfname = false;
            boolean blname = false;
            boolean bnname = false;
            boolean bsalary = false;

            public void startElement(String uri, String localName,String qName, 
                    Attributes attributes) throws SAXException {

                // code

            }

            public void endElement(String uri, String localName,
                    String qName) throws SAXException {

                // code

            }

            public void characters(char ch[], int start, int length) throws SAXException {

                // code
        };
Run Code Online (Sandbox Code Playgroud)

构造函数调用后有一个大括号(!?),似乎有一些方法的重写.然后用分号终止支架.在构造函数调用之后我从未见过大括号.这是正常的吗?怎么称呼?谢谢!

ps:在Eclipse上,如果我删除分号,则表示LocalVariableDeclarationStatement错误.

java constructor overriding

6
推荐指数
2
解决办法
522
查看次数

为什么服务仍在运行,如果它的进程被杀死?

我通过反编译检查了在某些应用程序的清单中,服务不是通过单独的进程启动的.顺便说一句,在任务管理器中,它显示为"正在运行".

例如,在Android 4.4.2上,Facebook有0个进程和2个服务正在运行.从文档中(如果我错了,请纠正我)我已经明白服务在其应用程序的相同过程中运行.如果进程终止,则服务停止(并且可以由AlarmManager或START_STICKY自动重新启动).

因此,如果它没有在一个单独的进程内启动,那么至少应该有一个服务可以运行的进程.那么,即使没有进程,服务是否可能运行?我再说一遍,服务(来自清单)没有GOT指令android:background

编辑1: 这似乎是Android 4.4.2的一个错误.看到这个这个.在我的情况下,当我从列表中滑动应用程序时遇到问题(如第二个链接中所述)

编辑2: 如果我错了,请纠正我,这是我所理解的.

一个Service对象首次创建时startService()被调用.onCreate()将在该Service对象上调用onStartCommand()并将跟随.从现在开始:

  • 如果进程终止,则服务对象仍然存在(如果stopSelf() 未调用)但它没有运行.
  • 如果服务中断,则重新创建的唯一方法是从START_STICKY(和其他重启常量)或手动调用startService().当服务从系统中终止时,将再次调用onCreate.

现在,这是Android <4.4.2上的正常行为.在KitKat上,如果从LRU列表中滑动应用程序,则进程会死亡,即使使用START_STICKY,它也不会自动重新启动.解决方法是AlarmManager.这是对的吗?

android process android-service

5
推荐指数
1
解决办法
1935
查看次数

Java SWT和无效的线程访问

我已经看过了,但它对我的代码不起作用.这是我独特的课程:

public static void main(String[] args) {
        try {
            Main window = new Main();
            window.open();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

public void open() {
        Display display = Display.getDefault();
        createContents();
        shell.open();
        shell.layout();
        while (!shell.isDisposed()) {
            if (!display.readAndDispatch()) {
                display.sleep();
            }
        }
    }

protected void createContents() {
        shell = new Shell(SWT.CLOSE | SWT.MIN | SWT.TITLE | SWT.ON_TOP);
        shell.setSize(301, 212);
        shell.setText("MyShell");
        // ...Other contents... 
        btn = new Button(shell, SWT.NONE);
        btn.setBounds(114, 151, 76, 25);
        btn.setText("BUTTON!");
        btn.addSelectionListener(new SelectionAdapter() {
            public …
Run Code Online (Sandbox Code Playgroud)

java swt multithreading

4
推荐指数
1
解决办法
4752
查看次数

如何仅反序列化 JSON 中的某些字段?

我正在使用 Gson 来提取一些字段。顺便说一句,我不想​​创建一个类,因为我在所有 JSON 响应中只需要一个值。这是我的回应:

{
    "result": {
        "name1": "value1",
        "name2": "value2",
    },
    "wantedName": "wantedValue"
}
Run Code Online (Sandbox Code Playgroud)

我需要wantedValue,但我不想创建整个类进行反序列化。使用Gson可以实现这一点吗?

java serialization json gson

4
推荐指数
1
解决办法
3231
查看次数

在C++中加密硬编码字符串的最佳方法是什么?

警告:C++ noob

我在StackOverflow上阅读了关于字符串加密的多篇帖子.顺便说一句,他们没有回答我的疑虑.我必须在我的代码中插入一个或两个硬编码字符串,但我想在调试/逆向工程时难以用纯文本阅读.这不是全部:我的字符串是URL,所以一个简单的数据包分析器(Wireshark)可以读取它.我说很难,因为我知道,当代码运行时,字符串在某处(在RAM中?)解密为纯文本,有人可以读取它.因此,假设不可能完全保护我的字符串,那么在C++中加密/解密它的最佳方法是什么?我在考虑这样的事情:

//I've omitted all the #include and main stuff of course...
string encryptedUrl = "Ajdu67gGHhbh34590Hb6vfu6gu" //Encrypted url with some known algorithm
URLDownloadToFile(NULL, encryptedUrl.decrypt(), C:\temp.txt, 0, NULL);
Run Code Online (Sandbox Code Playgroud)

包分析怎么样?我确定没有办法隐藏URL,但也许我错过了什么?谢谢你,对不起我最糟糕的英语!

编辑1:我的应用程序做了什么?

这是一个简单的登录脚本.我的应用程序从URL下载文本文件.此文件包含使用fstream库读取的加密字符串.然后解密该字符串并用于在另一个站点上登录.它非常弱,因为没有数据库,没有盐,没有散列.我的成就是确保url和登录字符串都不容易从二进制文件的静态分析中读取,并且可能通过动态分析(调试,逆向工程等)尽可能地难以读取.

c++ string encryption url

1
推荐指数
1
解决办法
2645
查看次数

如何从Java中的多个终结字符串中随机选取一个字符串?

正如问题所说,我在最后一堂课中有多个决赛字符串,如下所示:

public final class MyStrings {

    public static final String stringOne = "this is string one";
    public static final String stringTwo = "this is string two";
    public static final String stringThree = "this is string three";
    public static final String stringFour = "this is string four";
    public static final String stringFive = "this is string five";

}
Run Code Online (Sandbox Code Playgroud)

我知道将它们放在列表或数组中会更容易,但我想避免运行时填充这些结构.可能吗?从该类中随机选择字符串的最简单方法是什么?谢谢.

java string random final

1
推荐指数
2
解决办法
2674
查看次数

在Java中将多个字符串分组为通用字符串

我必须将多个字符串组合成一个来进行比较.这个分组应该完全像Java OO范例:一个"描述"子字符串的字符串.例:

String one = "hammer";
String two = "screwdriver";
String three = "pliers";
Run Code Online (Sandbox Code Playgroud)

现在让我们说你要"描述"它们:

String str = "tool"
Run Code Online (Sandbox Code Playgroud)

上面的所有字符串都是工具 现在,我的代码有一个,两个,三个字符串,并将它们更改为"工具".因此,例如,字符串1成为工具,字符串2和字符串3相同.如何"分类"他们?另一个扩展示例:

String one = "hammer"
String two = "screwdriver";
String three = "pliers";
String four = "horse";
String five = "cat";
String six = "dog";

public void stringConverter(String str)
{
    if ("string match to an animal")
        str = "animal";
    if ("string match to a tool")
        str = "tool";
}
Run Code Online (Sandbox Code Playgroud)

也许这是一个愚蠢的事情,但现在我没有任何想法!谢谢!

编辑:我的团队是有限的,我知道我只有猫,狗,马,锤等...编辑2:很难表达我!它应该是这样的:

Group Animal = {cat, dog, horse}
Group Tools = …
Run Code Online (Sandbox Code Playgroud)

java string grouping

0
推荐指数
1
解决办法
998
查看次数