Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/191.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java StarActivityForResult()导致在返回意图数据时强制关闭_Java_Android_Android Intent_Android Activity - Fatal编程技术网

Java StarActivityForResult()导致在返回意图数据时强制关闭

Java StarActivityForResult()导致在返回意图数据时强制关闭,java,android,android-intent,android-activity,Java,Android,Android Intent,Android Activity,以下是我代码的一部分: @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.menu_settings: startActivityForResult(new Intent(MainActivity.this,Settings.class),1); break; } return

以下是我代码的一部分:

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {

    case R.id.menu_settings:

        startActivityForResult(new Intent(MainActivity.this,Settings.class),1);
        break;
    }
    return true;
}


@Override
public void onActivityResult(int requestCode,int resultCode,Intent data) {

    Toast.makeText(getBaseContext(),requestCode, Toast.LENGTH_SHORT); // This was causing the error. See the fantastic answer that's been provided for details. Comment out this this and it works !

    if(requestCode==1) {
        if(resultCode==RESULT_OK) 
        {
            String extraData=data.getData().toString();

            minD=Integer.parseInt(extraData);
            Toast.makeText(getBaseContext(),minD, Toast.LENGTH_SHORT);
        }

    }

}
下面是Settings.java的代码

package com.example.com.draft1;

import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;



public class Settings extends Activity  {



@Override 

public void onCreate(Bundle savedInstanceState)
{

    super.onCreate(savedInstanceState);
    setContentView(R.layout.settings);


    Button setbtn = (Button) findViewById(R.id.SetminDistance);


    setbtn.setOnClickListener(new View.OnClickListener() {

        public void onClick(View v) {

        //Intent data=new Intent();
        EditText mind=(EditText) findViewById(R.id.minDistance);
                    String minDis =mind.getText().toString();
                    Intent data = new Intent();   
                    data.setData(Uri.parse(minDis));

        Toast.makeText(getBaseContext(), minDis, Toast.LENGTH_SHORT).show();
                  //  intent.putExtra("minD", minDis);





       if (getParent() == null) {
           setResult(RESULT_OK, data);
       } else {
           getParent().setResult(RESULT_OK, data);
       }
       finish();



      /*  setResult(RESULT_OK, data);
       finish();*/
            }

});

}
}
现在,当我为设置选择菜单选项时,所需的活动会完全打开,但是,当我尝试返回数据时,它会导致强制关闭

以下是显示错误的Logcat读数:

09-29 16:03:29.366: E/AndroidRuntime(766): FATAL EXCEPTION: main
09-29 16:03:29.366: E/AndroidRuntime(766): java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=1, result=-1, data=Intent { dat=65 }} to activity {com.example.com.draft1/com.example.com.draft1.MainActivity}: android.content.res.Resources$NotFoundException: String resource ID #0x1
09-29 16:03:29.366: E/AndroidRuntime(766):  at android.app.ActivityThread.deliverResults(ActivityThread.java:2532)
09-29 16:03:29.366: E/AndroidRuntime(766):  at android.app.ActivityThread.handleSendResult(ActivityThread.java:2574)
09-29 16:03:29.366: E/AndroidRuntime(766):  at android.app.ActivityThread.access$2000(ActivityThread.java:117)
09-29 16:03:29.366: E/AndroidRuntime(766):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:961)
09-29 16:03:29.366: E/AndroidRuntime(766):  at android.os.Handler.dispatchMessage(Handler.java:99)
09-29 16:03:29.366: E/AndroidRuntime(766):  at android.os.Looper.loop(Looper.java:130)
09-29 16:03:29.366: E/AndroidRuntime(766):  at android.app.ActivityThread.main(ActivityThread.java:3683)
09-29 16:03:29.366: E/AndroidRuntime(766):  at java.lang.reflect.Method.invokeNative(Native Method)
09-29 16:03:29.366: E/AndroidRuntime(766):  at java.lang.reflect.Method.invoke(Method.java:507)
09-29 16:03:29.366: E/AndroidRuntime(766):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
09-29 16:03:29.366: E/AndroidRuntime(766):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
09-29 16:03:29.366: E/AndroidRuntime(766):  at dalvik.system.NativeStart.main(Native Method)
09-29 16:03:29.366: E/AndroidRuntime(766): Caused by: android.content.res.Resources$NotFoundException: String resource ID #0x1
09-29 16:03:29.366: E/AndroidRuntime(766):  at android.content.res.Resources.getText(Resources.java:201)
09-29 16:03:29.366: E/AndroidRuntime(766):  at android.widget.Toast.makeText(Toast.java:258)
09-29 16:03:29.366: E/AndroidRuntime(766):  at com.example.com.draft1.MainActivity.onActivityResult(MainActivity.java:570)
09-29 16:03:29.366: E/AndroidRuntime(766):  at android.app.Activity.dispatchActivityResult(Activity.java:3908)
09-29 16:03:29.366: E/AndroidRuntime(766):  at android.app.ActivityThread.deliverResults(ActivityThread.java:2528)
09-29 16:03:29.366: E/AndroidRuntime(766):  ... 11 more
为什么我会在附近遇到一股力量

我真的很感谢你的帮助

谢谢你对这个问题感兴趣

根据建议

if(requestCode==1) {
        if(resultCode==RESULT_OK) 
        {
            //String extraData=data.getData().toString();

            //minD=Integer.parseInt(extraData);
            Toast.makeText(getBaseContext(),String.valueOf(requestCode), Toast.LENGTH_SHORT).show();
        }
如果你看到

所以,若您将第二个参数设置为
int
,那个么系统将在R.java中查找该id,但讽刺的是,实际上您想要打印数字,所以只需将第二个参数设置为
String
,即

将Toast行代码更改为

Toast.makeText(getBaseContext(),requestCode+"", Toast.LENGTH_SHORT).show();

如果你看到

所以,若您将第二个参数设置为
int
,那个么系统将在R.java中查找该id,但讽刺的是,实际上您想要打印数字,所以只需将第二个参数设置为
String
,即

将Toast行代码更改为

Toast.makeText(getBaseContext(),requestCode+"", Toast.LENGTH_SHORT).show();


您应该使用minent.putExtra而不是uri。。。 请检查此代码

MainActivity.java

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
    case R.id.menu_settings:
        startActivityForResult(new Intent(MainActivity.this, Settings.class), 1);
        break;
    }
    return true;
}

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == 1) {
        if (resultCode == RESULT_OK) {
            minD = Integer.parseInt(data.getStringExtra("data"));
            Toast.makeText(MainActivity.this, String.valueOf(minD), Toast.LENGTH_SHORT);
        }

    }

}`
public class Settings extends Activity {

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

    Button setbtn = (Button) findViewById(R.id.SetminDistance);

    setbtn.setOnClickListener(new View.OnClickListener() {

        public void onClick(View v) {

            EditText mind = (EditText) findViewById(R.id.minDistance);
            Intent data = getIntent();
            data.putExtra("data", mind.getText().toString());
            Toast.makeText(getBaseContext(), mind.getText().toString(), Toast.LENGTH_SHORT).show();

            if (getParent() == null) {
                setResult(RESULT_OK, data);
            } else {
                getParent().setResult(RESULT_OK, data);
            }
            finish();
        }

    });

}
Setting.java

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
    case R.id.menu_settings:
        startActivityForResult(new Intent(MainActivity.this, Settings.class), 1);
        break;
    }
    return true;
}

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == 1) {
        if (resultCode == RESULT_OK) {
            minD = Integer.parseInt(data.getStringExtra("data"));
            Toast.makeText(MainActivity.this, String.valueOf(minD), Toast.LENGTH_SHORT);
        }

    }

}`
public class Settings extends Activity {

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

    Button setbtn = (Button) findViewById(R.id.SetminDistance);

    setbtn.setOnClickListener(new View.OnClickListener() {

        public void onClick(View v) {

            EditText mind = (EditText) findViewById(R.id.minDistance);
            Intent data = getIntent();
            data.putExtra("data", mind.getText().toString());
            Toast.makeText(getBaseContext(), mind.getText().toString(), Toast.LENGTH_SHORT).show();

            if (getParent() == null) {
                setResult(RESULT_OK, data);
            } else {
                getParent().setResult(RESULT_OK, data);
            }
            finish();
        }

    });

}

}

您应该使用minent.putExtra而不是uri。。。 请检查此代码

MainActivity.java

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
    case R.id.menu_settings:
        startActivityForResult(new Intent(MainActivity.this, Settings.class), 1);
        break;
    }
    return true;
}

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == 1) {
        if (resultCode == RESULT_OK) {
            minD = Integer.parseInt(data.getStringExtra("data"));
            Toast.makeText(MainActivity.this, String.valueOf(minD), Toast.LENGTH_SHORT);
        }

    }

}`
public class Settings extends Activity {

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

    Button setbtn = (Button) findViewById(R.id.SetminDistance);

    setbtn.setOnClickListener(new View.OnClickListener() {

        public void onClick(View v) {

            EditText mind = (EditText) findViewById(R.id.minDistance);
            Intent data = getIntent();
            data.putExtra("data", mind.getText().toString());
            Toast.makeText(getBaseContext(), mind.getText().toString(), Toast.LENGTH_SHORT).show();

            if (getParent() == null) {
                setResult(RESULT_OK, data);
            } else {
                getParent().setResult(RESULT_OK, data);
            }
            finish();
        }

    });

}
Setting.java

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
    case R.id.menu_settings:
        startActivityForResult(new Intent(MainActivity.this, Settings.class), 1);
        break;
    }
    return true;
}

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == 1) {
        if (resultCode == RESULT_OK) {
            minD = Integer.parseInt(data.getStringExtra("data"));
            Toast.makeText(MainActivity.this, String.valueOf(minD), Toast.LENGTH_SHORT);
        }

    }

}`
public class Settings extends Activity {

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

    Button setbtn = (Button) findViewById(R.id.SetminDistance);

    setbtn.setOnClickListener(new View.OnClickListener() {

        public void onClick(View v) {

            EditText mind = (EditText) findViewById(R.id.minDistance);
            Intent data = getIntent();
            data.putExtra("data", mind.getText().toString());
            Toast.makeText(getBaseContext(), mind.getText().toString(), Toast.LENGTH_SHORT).show();

            if (getParent() == null) {
                setResult(RESULT_OK, data);
            } else {
                getParent().setResult(RESULT_OK, data);
            }
            finish();
        }

    });

}

}

资源$NotFoundException:字符串资源ID#0x1“
@Keyser感谢您的回复。你能解释一下吗?我是android新手,因此我在理解Logcat入口时遇到了一点困难抱歉,不能给你更多,但这就是强制关闭的原因。查看所有字符串资源代码。@CapDroid我已编辑了问题,以包含完整的Logcat erroryour error在此类Main活动中的570行。。这行是什么?
Resources$NotFoundException:String resource ID#0x1“
@Keyser感谢您的回复。你能解释一下吗?我是android新手,因此我在理解Logcat入口时遇到了一点困难抱歉,不能给你更多,但这就是强制关闭的原因。查看所有字符串资源代码。@CapDroid我已编辑了问题,以包含完整的Logcat erroryour error在此类Main活动中的570行。。这行是什么?谢谢你的回答。但是,我仍然收到相同的强制关闭错误我很抱歉,但不幸的是,它仍然给我一个强制关闭错误。我已经根据你的建议编辑了我的问题以反映代码。好吧,我犯了一个愚蠢的错误。从你的回答中学到了一些重要的东西。非常感谢你的回答。但是,我仍然收到相同的强制关闭错误。很抱歉,但不幸的是,它仍然给我一个强制关闭错误。我已经根据你的建议编辑了我的问题以反映代码。好吧,所以我犯了一个愚蠢的错误。从你的回答中学到了一些重要的东西。非常感谢