Android 从自定义活动传递结果失败?

Android 从自定义活动传递结果失败?,android,android-intent,android-activity,android-sqlite,Android,Android Intent,Android Activity,Android Sqlite,我已经试着解决这个问题有一段时间了,但我似乎不知道我在做什么有什么问题。我试图查找其他人遇到的类似问题,但他们的解决方案似乎无法解决我的问题。不管是谁 我得到了一个错误: java.lang.RuntimeException:传递结果失败 ResultInfo{who=null,request=1327,result=-1,data=Intent{(has) 附加)}}}到活动 {thinkgeist.wheresmystuff/thinkgeist.wheresmystuff.main活动}:

我已经试着解决这个问题有一段时间了,但我似乎不知道我在做什么有什么问题。我试图查找其他人遇到的类似问题,但他们的解决方案似乎无法解决我的问题。不管是谁

我得到了一个错误:

java.lang.RuntimeException:传递结果失败 ResultInfo{who=null,request=1327,result=-1,data=Intent{(has) 附加)}}}到活动 {thinkgeist.wheresmystuff/thinkgeist.wheresmystuff.main活动}: java.lang.IllegalStateException:尝试重新打开已关闭的 对象:SQLiteQuery:从项目中选择* 位于android.app.ActivityThread.deliverResults(ActivityThread.java:4053) 位于android.app.ActivityThread.handleSendResult(ActivityThread.java:4096) 位于android.app.ActivityThread.-wrap20(ActivityThread.java) 在android.app.ActivityThread$H.handleMessage(ActivityThread.java:1516) 位于android.os.Handler.dispatchMessage(Handler.java:102) 位于android.os.Looper.loop(Looper.java:154) 位于android.app.ActivityThread.main(ActivityThread.java:6077) 位于java.lang.reflect.Method.invoke(本机方法) 在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865)上 位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)

尝试从我创建的名为CreateActivity的方法返回时。下面是它的名称 main活动:

public void createItem(){
    Intent intent = new Intent(this, CreateActivity.class);
    startActivityForResult(intent, CREATE_ACTIVITY);
}
public class CreateActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {

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

    final EditText etName = (EditText) findViewById(R.id.etName);
    final EditText etDescription = (EditText) findViewById(R.id.etDescription);
    final EditText etSerial = (EditText) findViewById(R.id.etSerial);
    final EditText etLocation = (EditText) findViewById(R.id.etLocation);
    final EditText etQuantity = (EditText) findViewById(R.id.etQuantity);

    Button submit = (Button) findViewById(R.id.buttonSubmit);

    submit.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            String name = etName.getText().toString();
            String description = etDescription.getText().toString();
            String serial = etSerial.getText().toString();
            String location = etLocation.getText().toString();
            int quantity = Integer.parseInt(etQuantity.getText().toString());

            Item item = new Item(1, name, description, serial, location, quantity);

            Intent resultIntent = new Intent();
            resultIntent.putExtra("name", name);
            resultIntent.putExtra("description", description);
            resultIntent.putExtra("serial", serial);
            resultIntent.putExtra("location", location);
            resultIntent.putExtra("quantity", quantity);
            setResult(Activity.RESULT_OK, resultIntent);
            finish();

        }
    });
}
在这个调用代码之后,我们将跳到 CreateActivity:

public void createItem(){
    Intent intent = new Intent(this, CreateActivity.class);
    startActivityForResult(intent, CREATE_ACTIVITY);
}
public class CreateActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {

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

    final EditText etName = (EditText) findViewById(R.id.etName);
    final EditText etDescription = (EditText) findViewById(R.id.etDescription);
    final EditText etSerial = (EditText) findViewById(R.id.etSerial);
    final EditText etLocation = (EditText) findViewById(R.id.etLocation);
    final EditText etQuantity = (EditText) findViewById(R.id.etQuantity);

    Button submit = (Button) findViewById(R.id.buttonSubmit);

    submit.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            String name = etName.getText().toString();
            String description = etDescription.getText().toString();
            String serial = etSerial.getText().toString();
            String location = etLocation.getText().toString();
            int quantity = Integer.parseInt(etQuantity.getText().toString());

            Item item = new Item(1, name, description, serial, location, quantity);

            Intent resultIntent = new Intent();
            resultIntent.putExtra("name", name);
            resultIntent.putExtra("description", description);
            resultIntent.putExtra("serial", serial);
            resultIntent.putExtra("location", location);
            resultIntent.putExtra("quantity", quantity);
            setResult(Activity.RESULT_OK, resultIntent);
            finish();

        }
    });
}
最后,MainActivity中处理响应的代码

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data){
    super.onActivityResult(requestCode, resultCode, data);
    // Extract data from Create Activity

    if(requestCode == CREATE_ACTIVITY && resultCode==RESULT_OK && data != null) {

            String name = data.getStringExtra("name");
            String description = data.getStringExtra("description");
            String serial = data.getStringExtra("serial");
            String location = data.getStringExtra("location");
            int quantity = data.getIntExtra("quantity", 1);
            addItemToDatabase(name, description, serial, location, quantity);

    }
}
老实说,我认为这一定是我在某处使用了一些不正确的语法,因为我还不完全熟悉android开发。如果有人能为我指出正确的方向,我将不胜感激

java.lang.IllegalStateException:尝试重新打开已关闭的 对象:SQLiteQuery

我假设在
addItemToDatabase()
中,您试图对数据库执行一个操作,该操作已关闭

java.lang.IllegalStateException:尝试重新打开已关闭的 对象:SQLiteQuery


我假设在
addItemToDatabase()
中,您试图对数据库执行一个操作,该操作已关闭。

是的,似乎是这样,请将addItemToDatabase()函数的代码包含到您的问题中。是的,似乎是这样,请将addItemToDatabase()函数的代码包含到您的问题中。