草庐IT

java - 单击按钮加载选项卡布局后应用程序崩溃

coder 2024-07-02 原文

[编辑] 当我尝试 Sumant 关于在 Intent 构造函数中用“this”切换“v.getContext()”的建议时,Eclipse 说它无法构建应用程序。调用 onClick() 方法时,当前的 View 不是传递给它吗?

[编辑 2] 我可能已经弄清楚了问题所在。可能是因为我在使用 Android 2.3.3 模拟器时使用了适用于 Android 3.0 的布局。要么是那样,要么我只是使用字符串数组而不是整数数组。

在我的 Android 应用程序中,当用户单击按钮将他们带到选项卡式 Activity 时,我正在运行的模拟器(使用 Android 2.3.3)会强制关闭我的应用程序。这是初始 Activity 。

DungeonsDragonsAppActivity.java 文件

package com.androidGuy.DnDApp;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
import android.util.Log;

public class DungeonsDragonsAppActivity extends Activity {

    /* Use this for debugging. */
    private static final String DEBUG_TAG = "DnDAppDebugLogging";

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

    /* The main buttons... Yeah. */
        final Button create_character_button = (Button) findViewById(R.id.createCharacterButton);
            final Button open_character_button = (Button) findViewById(R.id.openCharacterButton);
        final Button retrieve_character_button = (Button) findViewById(R.id.RetrieveCharacterButton);

        /* The button for actually creating the character.. */
        create_character_button.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                try {
                    Intent intent = new Intent(v.getContext(),
                            CreateCharacterTabsActivity.class);
                    startActivityForResult(intent, 0);
                } catch (Exception e) {
                    Log.e(DEBUG_TAG, "Click failed", e);
                }
            }
        });

        /* The button for opening a pre-existing character. */
        open_character_button.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                Toast.makeText(DungeonsDragonsAppActivity.this,
                        "You will be able to open a character... Eventually.",
                        Toast.LENGTH_SHORT).show();
            }
        });

        /* The button for importing from D & D insider. */
        retrieve_character_button
                .setOnClickListener(new View.OnClickListener() {
                    public void onClick(View v) {
                        Toast.makeText(
                                DungeonsDragonsAppActivity.this,
                                "You will be able to import characters... Hopefully.",
                                Toast.LENGTH_SHORT).show();
                    }
                }

                );
    }
}

当用户点击按钮创建一个新角色时,它应该加载这个 Activity :

CreateCharacterTabsActivity.java

package com.androidGuy.DnDApp;

import android.app.TabActivity;
import android.os.Bundle;
import android.widget.TabHost;
import android.content.Intent;

public class CreateCharacterTabsActivity extends TabActivity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        TabHost tabHost = getTabHost();
        TabHost.TabSpec spec;
        Intent intent;

        // Initialize a TabSpec for each tab and add it to the TabHost.
        spec = tabHost.newTabSpec("scores");
        spec.setContent(new Intent().setClass(this,
                CharacterAbilityScoresActivity.class));
        spec.setIndicator("Scores");
        tabHost.addTab(spec);

        intent = new Intent().setClass(this, CharacterClassActivity.class);
        spec = tabHost.newTabSpec("classes");
        spec.setContent(intent);
        spec.setIndicator("Classes");
        tabHost.addTab(spec);

        tabHost.setCurrentTab(0);
    }

}

它使用此 XML 文件来呈现选项卡(我从一个 Android 开发教程中获取它)。

tabs.xml

<?xml version="1.0" encoding="utf-8"?>
<TabHost xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@android:id/tabhost"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    <LinearLayout
        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:padding="5dp">

        <FrameLayout
            android:id="@android:id/tabcontent"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:padding="5dp"
            android:layout_weight="1">

        </FrameLayout>

        <TabWidget
            android:id="@android:id/tabs"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_weight="0">
        </TabWidget>

    </LinearLayout>

</TabHost>

加载该 Activity 后,它还应将这些 Activity 加载到选项卡中。

CharacterAbilityScoresActivity.java

package com.androidGuy.DnDApp;

import android.app.Activity;
import android.os.Bundle;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
import android.widget.Toast;
import android.view.View;

public class CharacterAbilityScoresActivity extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.ability_score_spinners); // Set the scene.

        ArrayAdapter adapter = ArrayAdapter.createFromResource(this, R.array.ability_scores, android.R.layout.simple_spinner_item);
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

        /* The ability score spinners */
        Spinner strengthSpinner = (Spinner) findViewById(R.id.StrengthSpinner);
        strengthSpinner.setAdapter(adapter);
        strengthSpinner
                .setOnItemSelectedListener(new abilityScoreListSelectedListener());

        Spinner constitutionSpinner = (Spinner) findViewById(R.id.ConstitutionSpinner);
        constitutionSpinner.setAdapter(adapter);
        constitutionSpinner
                .setOnItemSelectedListener(new abilityScoreListSelectedListener());
    }

    /* Now let's see what the user selects. */
    class abilityScoreListSelectedListener implements OnItemSelectedListener {
        public void onItemSelected(AdapterView<?> parent, View view, int pos,
                long id) {
            Toast.makeText(parent.getContext(),
                    "You selected an ability score.  Way to go.",
                    Toast.LENGTH_LONG).show();
        }

        public void onNothingSelected(AdapterView parent) {
            // Do nothing... For now.
        }
    }
}

ability_score_spinners.xml

<?xml version="1.0" encoding="utf-8"?>
    <LinearLayout android:id="@+id/linearLayout1" android:layout_width="fill_parent" xmlns:android="http://schemas.android.com/apk/res/android" android:layout_height="match_parent">
        <TableLayout android:layout_height="match_parent" android:id="@+id/tableLayout1" android:layout_width="wrap_content">
            <TableRow android:id="@+id/tableRow1" android:layout_width="wrap_content" android:layout_height="match_parent">
                <Spinner android:layout_height="wrap_content" android:minWidth="10dip" android:layout_width="wrap_content" android:layout_gravity="left" android:layout_weight="1" android:id="@+id/StrengthSpinner" android:entries="@array/ability_scores" android:prompt="@string/ability_score_prompt"></Spinner>
            </TableRow>
            <TableRow android:id="@+id/tableRow2" android:layout_width="wrap_content" android:layout_height="wrap_content">
                <Spinner android:layout_height="wrap_content" android:layout_weight="1" android:layout_width="wrap_content" android:id="@+id/ConstitutionSpinner" android:entries="@array/ability_scores" android:prompt="@string/ability_score_prompt"></Spinner>
            </TableRow>
            <TableRow android:id="@+id/tableRow4" android:layout_width="wrap_content" android:layout_height="wrap_content"></TableRow>
            <TableRow android:layout_height="wrap_content" android:id="@+id/tableRow3" android:layout_width="wrap_content">
            </TableRow>
        </TableLayout>
        <TableLayout android:layout_height="match_parent" android:id="@+id/tableLayout2" android:layout_width="match_parent">
            <TableRow android:id="@+id/tableRow5" android:layout_width="wrap_content" android:layout_height="wrap_content">
                <TextView android:text="@string/strengthText" android:layout_height="wrap_content" android:textAppearance="?android:attr/textAppearanceLarge" android:id="@+id/StrengthText"></TextView>
            </TableRow>
            <TableRow android:id="@+id/tableRow6" android:layout_width="wrap_content" android:layout_height="wrap_content">
                <TextView android:layout_height="wrap_content" android:layout_width="wrap_content" android:textAppearance="?android:attr/textAppearanceLarge" android:id="@+id/textView1" android:text="@string/constitionText"></TextView>
            </TableRow>
            <TableRow android:id="@+id/tableRow7" android:layout_width="wrap_content" android:layout_height="wrap_content"></TableRow>
            <TableRow android:id="@+id/tableRow8" android:layout_width="wrap_content" android:layout_height="wrap_content">
            </TableRow>
        </TableLayout>
    </LinearLayout>

CharacterClassesActivity.java

package com.androidGuy.DnDApp;

import android.app.Activity;
import android.os.Bundle;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.TextView;

public class CharacterClassActivity extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.cha_classes);

        final RadioGroup classesButtons = (RadioGroup) findViewById(R.id.radioGroup1);
        classesButtons
                .setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
                    public void onCheckedChanged(RadioGroup group, int checkedId) {
                        TextView leTextView = (TextView) findViewById(R.id.chooseClassTextView);
                        if (checkedId != -1) {
                            RadioButton rb = (RadioButton) findViewById(checkedId);

                            if (rb != null) {
                                leTextView.setText("You chose: " + rb.getText());
                            }
                        } else {
                            leTextView.setText("Choose your class");
                        }
                    }
                });
    }
}

cha_classes.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout android:id="@+id/linearLayout1" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" xmlns:android="http://schemas.android.com/apk/res/android">
   <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textAppearance="?android:attr/textAppearanceLarge" android:text="Choose your class" android:id="@+id/chooseClassTextView"></TextView>

    <RadioGroup android:id="@+id/radioGroup1" android:layout_width="wrap_content" android:layout_height="wrap_content">
        <RadioButton android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/ClericClassButton" android:text="Cleric"></RadioButton>
        <RadioButton android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/FighterClassButton" android:text="Fighter"></RadioButton>
        <RadioButton android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/PaladinClassButton" android:text="Paladin"></RadioButton>
        <RadioButton android:layout_width="wrap_content" android:text="Ranger" android:layout_height="wrap_content" android:id="@+id/RangerClassButton"></RadioButton>
        <RadioButton android:layout_width="wrap_content" android:text="Rogue" android:layout_height="wrap_content" android:id="@+id/RogueClassButton"></RadioButton>
        <RadioButton android:layout_width="wrap_content" android:text="Warlock" android:layout_height="wrap_content" android:id="@+id/WarlockClassButton"></RadioButton>
        <RadioButton android:layout_width="wrap_content" android:text="Warlord" android:layout_height="wrap_content" android:id="@+id/WarlordClassButton"></RadioButton>
        <RadioButton android:layout_width="wrap_content" android:text="Wizard" android:layout_height="wrap_content" android:id="@+id/WizardClassButton"></RadioButton>
    </RadioGroup>
</LinearLayout>

能力分数应该在第一个选项卡中,角色类别在第二个选项卡中。我在 res/values/目录中编写了一个整数数组,并尝试在与能力分数一起使用的微调器中使用它。

一开始我以为是tab布局,是怎么处理的。它应该做的就是设置选项卡并用适当的 Activity 填充它。我还认为我在 CreateCharacterTabsActivity 中缺少 setContentView() 方法。但似乎并非如此。我还认为这是因为我的 list 缺少一些 Activity 条目,但这也不正确。

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      android:versionCode="1"
      android:versionName="1.0" package="com.androidGuy.DnDApp">
    <uses-sdk android:minSdkVersion="10" />

    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:name=".DungeonsDragonsAppActivity"
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name=".CreateCharacterTabsActivity" android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <action android:name="android.intent.category.LAUNCHER"></action>
            </intent-filter>
        </activity>
        <activity android:name=".CharacterAbilityScoresActivity"></activity>
        <activity android:name=".CharacterClassActivity"></activity>

    </application>
</manifest>

看来,错误可能出在我处理微调器整数数据的方式上。我创建了一个 ArrayAdapter 来接受整数数据,并在微调器中设置数据。不过,当我运行模拟器时,它仍然会崩溃。

这是崩溃时的 LogCat 堆栈跟踪。

ERROR/AndroidRuntime(363): FATAL EXCEPTION: main
ERROR/AndroidRuntime(363): java.lang.NullPointerException
ERROR/AndroidRuntime(363):     at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:355)
ERROR/AndroidRuntime(363):     at android.widget.ArrayAdapter.getView(ArrayAdapter.java:323)
ERROR/AndroidRuntime(363):     at android.widget.AbsSpinner.onMeasure(AbsSpinner.java:192)
ERROR/AndroidRuntime(363):     at android.view.View.measure(View.java:8313)
ERROR/AndroidRuntime(363):     at android.widget.TableRow.getColumnsWidths(TableRow.java:308)
ERROR/AndroidRuntime(363):     at android.widget.TableLayout.findLargestCells(TableLayout.java:500)
ERROR/AndroidRuntime(363):     at android.widget.TableLayout.measureVertical(TableLayout.java:465)
ERROR/AndroidRuntime(363):     at android.widget.TableLayout.onMeasure(TableLayout.java:431)
ERROR/AndroidRuntime(363):     at android.view.View.measure(View.java:8313)
ERROR/AndroidRuntime(363):     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3138)
ERROR/AndroidRuntime(363):     at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1017)
ERROR/AndroidRuntime(363):     at android.widget.LinearLayout.measureHorizontal(LinearLayout.java:701)
ERROR/AndroidRuntime(363):     at android.widget.LinearLayout.onMeasure(LinearLayout.java:311)
ERROR/AndroidRuntime(363):     at android.view.View.measure(View.java:8313)
ERROR/AndroidRuntime(363):     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3138)
ERROR/AndroidRuntime(363):     at android.widget.FrameLayout.onMeasure(FrameLayout.java:250)
ERROR/AndroidRuntime(363):     at android.view.View.measure(View.java:8313)
ERROR/AndroidRuntime(363):     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3138)
ERROR/AndroidRuntime(363):     at android.widget.FrameLayout.onMeasure(FrameLayout.java:250)
ERROR/AndroidRuntime(363):     at android.view.View.measure(View.java:8313)
ERROR/AndroidRuntime(363):     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3138)
ERROR/AndroidRuntime(363):     at android.widget.FrameLayout.onMeasure(FrameLayout.java:250)
ERROR/AndroidRuntime(363):     at android.view.View.measure(View.java:8313)
ERROR/AndroidRuntime(363):     at android.widget.LinearLayout.measureVertical(LinearLayout.java:531)
ERROR/AndroidRuntime(363):     at android.widget.LinearLayout.onMeasure(LinearLayout.java:309)
ERROR/AndroidRuntime(363):     at android.view.View.measure(View.java:8313)
ERROR/AndroidRuntime(363):     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3138)
ERROR/AndroidRuntime(363):     at android.widget.FrameLayout.onMeasure(FrameLayout.java:250)
ERROR/AndroidRuntime(363):     at android.view.View.measure(View.java:8313)
ERROR/AndroidRuntime(363):     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3138)
ERROR/AndroidRuntime(363):     at android.widget.FrameLayout.onMeasure(FrameLayout.java:250)
ERROR/AndroidRuntime(363):     at android.view.View.measure(View.java:8313)
ERROR/AndroidRuntime(363):     at android.widget.LinearLayout.measureVertical(LinearLayout.java:531)
ERROR/AndroidRuntime(363):     at android.widget.LinearLayout.onMeasure(LinearLayout.java:309)
ERROR/AndroidRuntime(363):     at android.view.View.measure(View.java:8313)
ERROR/AndroidRuntime(363):     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3138)
ERROR/AndroidRuntime(363):     at android.widget.FrameLayout.onMeasure(FrameLayout.java:250)
ERROR/AndroidRuntime(363):     at android.view.View.measure(View.java:8313)
ERROR/AndroidRuntime(363):     at android.view.ViewRoot.performTraversals(ViewRoot.java:839)
ERROR/AndroidRuntime(363):     at android.view.ViewRoot.handleMessage(ViewRoot.java:1859)
ERROR/AndroidRuntime(363):     at android.os.Handler.dispatchMessage(Handler.java:99)
ERROR/AndroidRuntime(363):     at android.os.Looper.loop(Looper.java:123)
ERROR/AndroidRuntime(363):     at android.app.ActivityThread.main(ActivityThread.java:3683)
ERROR/AndroidRuntime(363):     at java.lang.reflect.Method.invokeNative(Native Method)
ERROR/AndroidRuntime(363):     at java.lang.reflect.Method.invoke(Method.java:507)
ERROR/AndroidRuntime(363):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
ERROR/AndroidRuntime(363):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
ERROR/AndroidRuntime(363):     at dalvik.system.NativeStart.main(Native Method)

感谢您提供的任何见解。

最佳答案

您的 list 中似乎定义了两个启动器 Activity :

...
<activity android:name=".DungeonsDragonsAppActivity"
          android:label="@string/app_name">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>
<activity android:name=".CreateCharacterTabsActivity" android:label="@string/app_name">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <action android:name="android.intent.category.LAUNCHER"></action>
    </intent-filter>
</activity>
...

这可能会导致 TabManager 崩溃。

关于java - 单击按钮加载选项卡布局后应用程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6605710/

有关java - 单击按钮加载选项卡布局后应用程序崩溃的更多相关文章

  1. ruby - 将差异补丁应用于字符串/文件 - 2

    对于具有离线功能的智能手机应用程序,我正在为Xml文件创建单向文本同步。我希望我的服务器将增量/差异(例如GNU差异补丁)发送到目标设备。这是计划:Time=0Server:hasversion_1ofXmlfile(~800kiB)Client:hasversion_1ofXmlfile(~800kiB)Time=1Server:hasversion_1andversion_2ofXmlfile(each~800kiB)computesdeltaoftheseversions(=patch)(~10kiB)sendspatchtoClient(~10kiBtransferred)Cl

  2. ruby - 检查 "command"的输出应该包含 NilClass 的意外崩溃 - 2

    为了将Cucumber用于命令行脚本,我按照提供的说明安装了arubagem。它在我的Gemfile中,我可以验证是否安装了正确的版本并且我已经包含了require'aruba/cucumber'在'features/env.rb'中为了确保它能正常工作,我写了以下场景:@announceScenario:Testingcucumber/arubaGivenablankslateThentheoutputfrom"ls-la"shouldcontain"drw"假设事情应该失败。它确实失败了,但失败的原因是错误的:@announceScenario:Testingcucumber/ar

  3. ruby-on-rails - Rails 应用程序之间的通信 - 2

    我构建了两个需要相互通信和发送文件的Rails应用程序。例如,一个Rails应用程序会发送请求以查看其他应用程序数据库中的表。然后另一个应用程序将呈现该表的json并将其发回。我还希望一个应用程序将存储在其公共(public)目录中的文本文件发送到另一个应用程序的公共(public)目录。我从来没有做过这样的事情,所以我什至不知道从哪里开始。任何帮助,将不胜感激。谢谢! 最佳答案 无论Rails是什么,几乎所有Web应用程序都有您的要求,大多数现代Web应用程序都需要相互通信。但是有一个小小的理解需要你坚持下去,网站不应直接访问彼此

  4. ruby - 无法运行 Rails 2.x 应用程序 - 2

    我尝试运行2.x应用程序。我使用rvm并为此应用程序设置其他版本的ruby​​:$rvmuseree-1.8.7-head我尝试运行服务器,然后出现很多错误:$script/serverNOTE:Gem.source_indexisdeprecated,useSpecification.Itwillberemovedonorafter2011-11-01.Gem.source_indexcalledfrom/Users/serg/rails_projects_terminal/work_proj/spohelp/config/../vendor/rails/railties/lib/r

  5. ruby - 默认情况下使选项为 false - 2

    这是在Ruby中设置默认值的常用方法:classQuietByDefaultdefinitialize(opts={})@verbose=opts[:verbose]endend这是一个容易落入的陷阱:classVerboseNoMatterWhatdefinitialize(opts={})@verbose=opts[:verbose]||trueendend正确的做法是:classVerboseByDefaultdefinitialize(opts={})@verbose=opts.include?(:verbose)?opts[:verbose]:trueendend编写Verb

  6. ruby - 如何在续集中重新加载表模式? - 2

    鉴于我有以下迁移:Sequel.migrationdoupdoalter_table:usersdoadd_column:is_admin,:default=>falseend#SequelrunsaDESCRIBEtablestatement,whenthemodelisloaded.#Atthispoint,itdoesnotknowthatusershaveais_adminflag.#Soitfails.@user=User.find(:email=>"admin@fancy-startup.example")@user.is_admin=true@user.save!ende

  7. ruby-on-rails - Rails 应用程序中的 Rails : How are you using application_controller. rb 是新手吗? - 2

    刚入门rails,开始慢慢理解。有人可以解释或给我一些关于在application_controller中编码的好处或时间和原因的想法吗?有哪些用例。您如何为Rails应用程序使用应用程序Controller?我不想在那里放太多代码,因为据我了解,每个请求都会调用此Controller。这是真的? 最佳答案 ApplicationController实际上是您应用程序中的每个其他Controller都将从中继承的类(尽管这不是强制性的)。我同意不要用太多代码弄乱它并保持干净整洁的态度,尽管在某些情况下ApplicationContr

  8. Ruby Readline 在向上箭头上使控制台崩溃 - 2

    当我在Rails控制台中按向上或向左箭头时,出现此错误:irb(main):001:0>/Users/me/.rvm/gems/ruby-2.0.0-p247/gems/rb-readline-0.4.2/lib/rbreadline.rb:4269:in`blockin_rl_dispatch_subseq':invalidbytesequenceinUTF-8(ArgumentError)我使用rvm来管理我的ruby​​安装。我正在使用=>ruby-2.0.0-p247[x86_64]我使用bundle来管理我的gem,并且我有rb-readline(0.4.2)(人们推荐的最少

  9. java - 等价于 Java 中的 Ruby Hash - 2

    我真的很习惯使用Ruby编写以下代码:my_hash={}my_hash['test']=1Java中对应的数据结构是什么? 最佳答案 HashMapmap=newHashMap();map.put("test",1);我假设? 关于java-等价于Java中的RubyHash,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/22737685/

  10. ruby-on-rails - 如何在我的 Rails 应用程序 View 中打印 ruby​​ 变量的内容? - 2

    我是一个Rails初学者,但我想从我的RailsView(html.haml文件)中查看Ruby变量的内容。我试图在ruby​​中打印出变量(认为它会在终端中出现),但没有得到任何结果。有什么建议吗?我知道Rails调试器,但更喜欢使用inspect来打印我的变量。 最佳答案 您可以在View中使用puts方法将信息输出到服务器控制台。您应该能够在View中的任何位置使用Haml执行以下操作:-puts@my_variable.inspect 关于ruby-on-rails-如何在我的R

随机推荐