0

我创建了一个意图,它获取输入到两个编辑文本中的值,并在单击提交按钮时将它们作为意图发送到另一个类,这里​​是代码:

Button bSubmit1 = (Button) findViewById(R.id.submit2); //Submit Button
    bSubmit1.setOnClickListener(new View.OnClickListener(){

        public void onClick(View v) {
            // TODO Auto-generated method stub

            String entry_Minutes = entryminutes.getText().toString();
            String entry_Hours = entryhours.getText().toString();

            Intent i=new Intent("com.lukeorpin.theappliancekeeper.MOVINGSTRINGS");
            i.putExtra("Entry_Minutes", entry_Minutes);
            i.putExtra("Entry_Hours", entry_Hours);
            startActivity(i);

然后开始下一个类中的活动,其中在意图中发送的字符串应该显示在另外两个编辑文本中,但是两个编辑文本框中没有出现任何内容。这是另一个类中代码的另一部分:

public class EntryStatistics extends Activity {

EditText hoursBox, minutesBox;

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.entrystatistics);

    hoursBox = (EditText)findViewById(R.id.entry_hours);
    minutesBox = (EditText)findViewById(R.id.entry_minutes);

    String entry_minutes = getIntent().getStringExtra("Entry_Minutes");
    if(entry_minutes!=null){
        return;
    }
    String entry_hours = getIntent().getStringExtra("Entry_Hours");
    if(entry_hours!=null){
        return;
    }


    hoursBox.setText(entry_hours);
    minutesBox.setText(entry_minutes);

谁能告诉我为什么字符串中的值没有显示在编辑文本中?什么都没有显示。谢谢

以下是完整的错误消息:

04-14 03:00:47.300: E/AndroidRuntime(373): FATAL EXCEPTION: main
04-14 03:00:47.300: E/AndroidRuntime(373): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.lukeorpin.theappliancekeeper/com.lukeorpin.theappliancekeeper.EntryStatistics}: java.lang.NullPointerException
04-14 03:00:47.300: E/AndroidRuntime(373):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1647)
04-14 03:00:47.300: E/AndroidRuntime(373):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
04-14 03:00:47.300: E/AndroidRuntime(373):  at android.app.ActivityThread.access$1500(ActivityThread.java:117)
04-14 03:00:47.300: E/AndroidRuntime(373):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
04-14 03:00:47.300: E/AndroidRuntime(373):  at android.os.Handler.dispatchMessage(Handler.java:99)
04-14 03:00:47.300: E/AndroidRuntime(373):  at android.os.Looper.loop(Looper.java:123)
04-14 03:00:47.300: E/AndroidRuntime(373):  at android.app.ActivityThread.main(ActivityThread.java:3683)
04-14 03:00:47.300: E/AndroidRuntime(373):  at java.lang.reflect.Method.invokeNative(Native Method)
04-14 03:00:47.300: E/AndroidRuntime(373):  at java.lang.reflect.Method.invoke(Method.java:507)
04-14 03:00:47.300: E/AndroidRuntime(373):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
04-14 03:00:47.300: E/AndroidRuntime(373):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
04-14 03:00:47.300: E/AndroidRuntime(373):  at dalvik.system.NativeStart.main(Native Method)
04-14 03:00:47.300: E/AndroidRuntime(373): Caused by: java.lang.NullPointerException
04-14 03:00:47.300: E/AndroidRuntime(373):  at com.lukeorpin.theappliancekeeper.EntryStatistics.onCreate(EntryStatistics.java:34)
04-14 03:00:47.300: E/AndroidRuntime(373):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
04-14 03:00:47.300: E/AndroidRuntime(373):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)
04-14 03:00:47.300: E/AndroidRuntime(373):  ... 11 more

这是第 34 和 35 行:

hoursBox.setText(entry_hours);
minutesBox.setText(entry_minutes);
4

4 回答 4

1

在您的空检查中,IT 看起来像是一个简单的错字。如果字符串不为空,则您当前正在忽略字符串,而应该反过来。

修复应该相对简单。只是改变

if(entry_minutes!=null){
    return;
}

if(entry_minutes==null){
    return;
}

对两个字符串都完成此操作后,EditTexts 应该会毫无问题地更新。

于 2012-04-14T02:03:53.147 回答
0
 String entry_minutes = getIntent().getStringExtra("Entry_Minutes");
    if(entry_minutes==null){
        return;
    }
    String entry_hours = getIntent().getStringExtra("Entry_Hours");
    if(entry_hours==null){
        return;
    }

因为当前行返回您,因为 entry_minutes 不为空,并且根据您的条件它为真。将其更改为等于。同样从您的第一个活动开始,您正在调用一个新活动,如下所示

Intent i=new Intent("com.lukeorpin.theappliancekeeper.MOVINGSTRINGS");

你有 EntryStatistics 活动的代码,我认为你没有调用 EntryStatistics 活动。

只需将上述意图更改为以下并尝试::

Intent i=new Intent(ThisActivityName.this,EntryStatistics.class);
于 2012-04-14T02:18:08.190 回答
0

这可以通过保留一些调试点并使用 F6 逐步执行以调试模式运行应用程序来逐步清楚地观察到。


发送或接收对象或字符串

发送字符串数据

正如我们已经知道的那样,我们可以使用 Intents 从一个 Activity 转移到另一个 Activity。

Intent i = new Intent(MainActivity.this,GoActivity.class);

String data = “bla bla”;// Data String to send

i.putExtra("DATA",data );

接收数据

我们可以接收到上面的字符串数据如下图。

Intent i = getIntent();
String data = i.getStringExtra("DATA");// you well get the String data i.e., BLA BLA

发送和接收数据时,红色数据应相同。

发送对象

这是将对象从一个类发送到另一个类的代码。发送 Object 的一件重要事情是该类应该实现 Serializable 类。

下面的红色文本应该是相同的。

//MainActivity.java

Intent i = new Intent(MainActivity.this,startActivity.class);

ObjectClassName object = new ObjectClassName();

i.putExtra("THIS", Object);

接收对象

// 开始活动.java

Intent i = getIntent();
ObjectClassName obj = (ObjectClassName) getIntent().getSerializableExtra("THIS");// TypeCasting needed
于 2012-04-14T02:11:49.987 回答
0

使用这个技巧:


X 类:

static String entry_Minutes="",entry_Hours="";
Button bSubmit1 = (Button) findViewById(R.id.submit2); //Submit Button
    bSubmit1.setOnClickListener(new View.OnClickListener(){

        public void onClick(View v) {
            // TODO Auto-generated method stub

            entry_Minutes = entryminutes.getText().toString();
            entry_Hours = entryhours.getText().toString();

            Intent i=new Intent("com.lukeorpin.theappliancekeeper.MOVINGSTRINGS");
            startActivity(i);

入口统计:

public class EntryStatistics extends Activity {

EditText hoursBox, minutesBox;

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.entrystatistics);

    hoursBox = (EditText)findViewById(R.id.entry_hours);
    minutesBox = (EditText)findViewById(R.id.entry_minutes);

    hoursBox.setText(ClassX.entry_Hours);
    minutesBox.setText(ClassX.entry_Minutes);
于 2012-04-14T02:10:09.943 回答