当前位置: 首页 > 知识库问答 >
问题:

如何在使用应用程序公司 v22.1.0 时设置内容在超级.on之前创建?

巫马正卿
2023-03-14

嘿,我刚刚将我的应用程序升级到AppCompat v22.1.0并得到了这个例外

Caused by: java.lang.IllegalArgumentException: AppCompat does not support the current theme features
        at android.support.v7.app.AppCompatDelegateImplV7.ensureSubDecor(AppCompatDelegateImplV7.java:360) 
        at android.support.v7.app.AppCompatDelegateImplV7.setContentView(AppCompatDelegateImplV7.java:246) 
        at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:106) 

我在这里找到了 https://stackoverflow.com/a/29790071/2781359

问题仍然没有解决,因为我在ConnectionWifiEditActive类中super.onCreate后调用setContentView。

当我更改它时,它会抛出NullPointerException我如何解决这个问题?

Caused by: java.lang.NullPointerException
            at Client.Activity.connection.ConnectionEditActivity.onResume(ConnectionEditActivity.java:46)
            at Client.Activity.connection.ConnectionWifiEditActivity.onResume(ConnectionWifiEditActivity.java:81)

连接编辑活动

public class ConnectionWifiEditActivity extends ConnectionEditActivity implements OnClickListener
{
    private ConnectionWifi connection;
    private EditText host;
    private EditText port;
    Button scan;
    ListView lv;
    private Toolbar mToolbar;

    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        this.setContentView(R.layout.connectionwifiedit);
        lv = (ListView) findViewById(android.R.id.list);
        this.connection = (ConnectionWifi) connectionParam;
        mToolbar = (Toolbar) findViewById(R.id.toolbar_actionbar);
        setSupportActionBar(mToolbar);
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        this.host = (EditText) this.findViewById(R.id.host);
        this.port = (EditText) this.findViewById(R.id.port);
        SnackbarManager.show(
                Snackbar.with(getApplicationContext()) // context
                        .type(SnackbarType.MULTI_LINE) // Set is as a multi-line snackbar
                        .text(R.string.tip) // text to be displayed
                        .duration(Snackbar.SnackbarDuration.LENGTH_INDEFINITE)
                , this);
    }

    public void Save(View v){
        this.finish();
    }


    @Override
    public void onClick(View v)
    {

    }

    protected void onResume()
    {
        super.onResume();
        this.host.setText(this.connection.getHost());
        this.port.setText(Integer.toString(this.connection.getPort()));
    }

    protected void onPause()
    {
        super.onPause();

        this.connection.setHost(this.host.getText().toString());
        this.connection.setPort(Integer.parseInt(this.port.getText().toString()));
    }}

连接编辑活动

public static Connection connectionParam;

    private Connection connection;

    private EditText name;
    private EditText password;

    public class ConnectionEditActivity extends AppCompatActivity implements OnClickListener
    {
        public static Connection connectionParam;

        private Connection connection;

        private Button save;

        private EditText name;
        private EditText password;

        protected void onCreate(Bundle savedInstanceState)
        {
            super.onCreate(savedInstanceState);
            this.connection = connectionParam;
            this.name = (EditText) this.findViewById(R.id.name);
            this.password = (EditText) this.findViewById(R.id.password);

        }

        protected void onResume()
        {
            super.onResume();
            this.name.setText(this.connection.getName());
            this.password.setText(this.connection.getPassword());
        }

        protected void onPause()
        {
            super.onPause();
            this.connection.setName(this.name.getText().toString());
            this.connection.setPassword(this.password.getText().toString());
        }

        public void onClick(View v)
        {
            if (v == this.save)
            {
                this.finish();
            }
        }
    }

关系

public abstract class Connection implements Comparable<Connection>, Serializable
{
    private static final long serialVersionUID = 1L;

    public static final int TYPE_COUNT = 2;

    public static final int WIFI = 0;
    public static final int BLUETOOTH = 1;

    private String name;
    private String password;

    public Connection()
    {
        this.name = "";
        this.password = RemoteItConnection.DEFAULT_PASSWORD;
    }

    public static Connection load(SharedPreferences preferences, ConnectionList list, int position)
    {
        Connection connection = null;
        int type = preferences.getInt("connection_" + position + "_type", -1);

        switch (type)
        {
            case WIFI:
                connection = ConnectionWifi.load(preferences, position);
                break;
            case BLUETOOTH:
                connection = ConnectionBluetooth.load(preferences, position);
                break;
        }

        connection.name = preferences.getString("connection_" + position + "_name", null);

        connection.password = preferences.getString("connection_" + position + "_password", null);

        return connection;
    }

    public void save(Editor editor, int position)
    {
        editor.putString("connection_" + position + "_name", this.name);

        editor.putString("connection_" + position + "_password", this.password);
    }

    public abstract RemoteItConnection connect(RemoteIt application) throws IOException;

    public abstract void edit(Context context);

    protected void edit(Context context, Intent intent)
    {
        ConnectionEditActivity.connectionParam = this;
        context.startActivity(intent);
    }

    public String getName()
    {
        return name;
    }

    public void setName(String name)
    {
        this.name = name;
    }

    public String getPassword()
    {
        return password;
    }

    public void setPassword(String password)
    {
        this.password = password;
    }

    public int compareTo(Connection c)
    {
        return this.name.compareTo(c.name);
    }
}

共有3个答案

汪臻
2023-03-14

小技巧就是使用< code > override fun onPostCreate(savedInstanceState:Bundle?)方法来查找视图

赵正雅
2023-03-14

将这一点添加到你的风格中(两者都需要)

<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>

在ConnectionEditActivity中,在调用setContentView之前调用findViewById,它将始终返回null。所以你的观点将永远是空的。

this.connection = connectionParam;
this.name = (EditText) this.findViewById(R.id.name);
this.password = (EditText) this.findViewById(R.id.password);
南门峰
2023-03-14

既然你想在超方法中得到一些ui元素,你就必须找到一种方法来定义超类中的布局。这是因为你得到了其他答案中描述的NPE。

可以在超类中使用设置内容视图(),使用一种方法返回要使用的布局。

这样,您可以重写子类中的布局,重写方法。

例如,您可以使用<code>setContentView(getLayoutId()):

public class ConnectionEditActivity extends AppCompatActivity {

    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);

        setContentView(getLayoutId());  //pay attention here...

        this.connection = connectionParam;
        this.name = (EditText) this.findViewById(R.id.name);
        this.password = (EditText) this.findViewById(R.id.password);
    }

    protected int getLayoutId(){
       //....
    }

}

并且可以在其他活动中重写它,这样可以避免使用< code>setContentView方法。

public class ConnectionWifiEditActivity extends ConnectionEditActivity{

   @Override
   protected int getLayoutId(){
       return R.layout.connectionwifiedit;
   }

    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        //setContentView();   //comment this line
        //..
    }

}
 类似资料:
  • 我的程序应该使用多线程运行很长时间。我需要为线程设置超时的能力,一旦线程终止,我想重新启动它。这是我的代码:

  • 问题内容: 我需要给我的用户一个Web界面来更改会话超时间隔。因此,Web应用程序的不同安装对其会话将具有不同的超时,但是它们不能不同。 有没有办法以编程方式设置会话超时,以便我可以使用读取配置的时间间隔并在应用程序启动时进行设置? 问题答案: 代替使用ServletContextListener,而使用。 在该方法中,您可以通过编程方式设置 会话超时 : 并且不要忘记在 部署描述符中 定义 侦听

  • 我正在让我的代码睡眠6秒。现在我可以期待系统进入超时,对吧?系统应该给出一些问题,告诉超时发生,但流程继续正常。为什么?

  • 我在运行单个节点的火花。 我的应用程序(java-web)使用的内存比可用的少。我发现这条线很有用。 对于本地模式,您只有一个执行器,而这个执行器是您的驱动程序,所以您需要设置驱动程序的内存。*也就是说,在本地模式下,当您运行spark-submit时,JVM已经启动了默认内存设置,因此在conf中设置“spark.driver.memory”实际上不会对您有任何帮助。相反,您需要运行spark-

  • PS C:\用户\HP\桌面 安装软件包。这可能需要几分钟。使用cra-模板安装react-dom和react-script…… npm错误!代码ERR_SOCKET_TIMEOUT npm ERR!errno ERR_SOCKET_TIMEOUT npm ERR!对https://registry.npmjs.org/bfj的请求失败,原因:套接字超时 npm ERR!此运行的完整日志可在以下文

  • 4.3.1.2 创建/使用公共内容供应器 公共内容供应器是应该由未指定的大量应用使用的内容供应器。 需要注意的是,由于它不指定客户端,它可能会受到恶意软件的攻击和篡改。 例如,可以通过select()获取保存的数据,可以通过update()更改数据,或者可以通过insert()/ delete()插入/删除假数据。 另外,在使用 Android OS 未提供的自定义公共内容供应器时,需要注意的是,