【问题标题】:Populate HashMap with Predefined Values in Android Application Causing Application to Crash在 Android 应用程序中使用预定义值填充 HashMap 导致应用程序崩溃
【发布时间】:2017-05-20 15:04:01
【问题描述】:

我是移动开发领域的新手,我目前正在尝试创建一个应用程序,该应用程序允许某人查找首字母缩略词并了解其含义,以及在库中添加首字母缩略词(如果不存在)。为此,我尝试使用 HashMap。我注意到我的应用程序每次打开时都会创建一个新的 HashMap 实例,因此需要预定义一些值。我遵循了this answer 中给出的建议,但现在我的应用程序每次打开时都会崩溃。

另外,在尝试排除故障的过程中,我的 startActivity 已停止工作。当我将鼠标悬停在 startActivity 上时它告诉我“无法解析方法 'startActivity(android.content.Intent)'”并且“无法解析构造函数 'Intent(com.private.CSrenA.acronymlookup.Search, java.lang.Class)'”所以现在我所有的 java 文件都停止工作了。

这是我的代码:

    package com.private.CSRenA.acronymlookup;

import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.widget.EditText;

import java.util.HashMap;


public class Search extends AppCompatActivity {
    public EditText mEdit;
    public HashMap<String,String> acros = new HashMap<String,String>(){{
        //add all currently known thingies.
        acros.put("ASAP","As Soon As Possible");

    }};


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_search);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        mEdit = (EditText)findViewById(R.id.acroterm);
        FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
        fab.setImageResource(R.drawable.ic_search);
        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {


                if(acros.containsKey(mEdit.getText().toString())){
                    startActivity(new Intent(Search.this, ValidAcronym.class));
                }
                else{
                    startActivity(new Intent(Search.this, InvalidAcronym.class));
                }

            }
        });
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    }
    public HashMap<String,String> getMap(){
        return acros;
    }

    public void addAcro(String i, String s) {
        if(!acros.containsKey(i)){
            acros.put(i,s);
        }
        else{
            startActivity(new Intent(Search.this, AlreadyExists.class));
        }

    }

}

如果可以的话请帮忙!我完全迷失了自己做错了什么。

注意:包裹名称已更改以保护我的身份和职业。

【问题讨论】:

  • 注意:我已经阅读了所有类似的问题,但没有一个答案能够提供帮助。

标签: java android android-intent hashmap


【解决方案1】:

我假设您的应用程序由于 NullPointerException 而崩溃。尝试按如下方式拆分创建:

public HashMap<String,String> acros = new HashMap<>();

onCreate()里面:

acros.put("ASAP","As Soon As Possible");

关于startActivity()-问题。如果您确实已将包重命名为 ...private...,则需要删除 private 部分,因为 private 是 Java 关键字,不得在包名称中使用。

【讨论】:

  • 这解决了我的问题!我发现 startActivity 问题是由于我的语法造成的。我把它分成两个单独的语句,错误就消失了。
【解决方案2】:

变化

public HashMap<String,String> acros = new HashMap<String,String>(){{
    //add all currently known thingies.
    acros.put("ASAP","As Soon As Possible");

}};

public HashMap<String,String> acros = new HashMap<String,String>(){{
    //add all currently known thingies.
   put("ASAP","As Soon As Possible");

}};

应该修复你的崩溃

【讨论】:

  • 谢谢!我知道我可能犯了一个小错误,因为我真的很擅长这样做。
猜你喜欢
  • 2014-05-08
  • 2013-12-02
  • 2014-09-09
  • 1970-01-01
  • 1970-01-01
  • 2022-10-05
  • 2013-03-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多