这是我的代码的一部分:
@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();
}
答案 0 :(得分:4)
如果您看到Toast.makeText
public static Toast makeText (Context context, int resId, int duration)
因此,如果您将第二个参数设为int
,那么系统将在R.java中查找此ID,但实际上您需要打印数字,因此只需将第二个参数转换为String
即{{ 3}}
public static Toast makeText (Context context, CharSequence text, int duration)
将Toast行代码更改为
Toast.makeText(getBaseContext(),requestCode+"", Toast.LENGTH_SHORT).show();
或
Toast.makeText(getBaseContext(),String.valueOf(requestCode), Toast.LENGTH_SHORT).show();
答案 1 :(得分:0)
你应该使用mIntent.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);
}
}
}`
<强> Setting.java 强>
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();
}
});
}
}