Java StartActivityforResult崩溃
假设我有3个活动,第一个是MainActivity,第二个是PopUp,第三个是SearchCategory 我想做的是,我将启动这个活动,弹出窗口有一个按钮。现在,当我单击此按钮时,我希望它将其存储为字符串,并将其作为意图传递,以便我可以将其用于MainActivity,以比较其内容 这对我的SearchCategory类有效 我遇到的问题是,当我单击弹出类中的按钮时,它崩溃了 我的主要活动的onActivityResult的代码:Java StartActivityforResult崩溃,java,android,android-intent,Java,Android,Android Intent,假设我有3个活动,第一个是MainActivity,第二个是PopUp,第三个是SearchCategory 我想做的是,我将启动这个活动,弹出窗口有一个按钮。现在,当我单击此按钮时,我希望它将其存储为字符串,并将其作为意图传递,以便我可以将其用于MainActivity,以比较其内容 这对我的SearchCategory类有效 我遇到的问题是,当我单击弹出类中的按钮时,它崩溃了 我的主要活动的onActivityResult的代码: protected void onActivityResul
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK) {
Bundle searchCategory = data.getExtras();
if (start.equals("1")){
route = searchCategory.getString("route");
}else {
start = searchCategory.getString("start");
route = searchCategory.getString("route");
}
...
}
我的SearchCategory类按钮的代码:
public void search(View view) {
category = (MaterialBetterSpinner)findViewById(R.id.spinner_category);
category_string = category.getText().toString();
route = (MaterialBetterSpinner)findViewById(R.id.spinner_routes);
route_string = route.getText().toString();
Intent intent = new Intent();
Bundle bundle = new Bundle();
bundle.putString("start", category_string);
bundle.putString("route", route_string);
intent.putExtras(bundle);
setResult(RESULT_OK, intent);
finish();
}
我的弹出类的代码:
package rjj.manilapuvtravelcompanion;
import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.util.DisplayMetrics;
import android.view.View;
import android.widget.TextView;
import org.w3c.dom.Text;
/**
* Created by Julian on 8/5/2017.
*/
public class PopUp extends AppCompatActivity {
String route, start = "1";
TextView textView2;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.pop_layout);
DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
int width = dm.widthPixels;
int height = dm.heightPixels;
getWindow().setLayout((int)(width*.8),(int)(height*.5));
route = getIntent().getExtras().getString("route");
//Checks if I retrieved the intent correctly
if (route.equals("Sample Route")){
textView2 = (TextView)findViewById(R.id.textView2);
textView2.setText("Nice");
}
}
public void getRoute(View view) {
if (route.equals("Sample Route")){
Intent intent = new Intent();
Bundle bundle = new Bundle();
intent.putExtra("start", start);
intent.putExtra("route", route);
intent.putExtras(bundle);
setResult(RESULT_OK, intent);
finish();
}
}
}
这是单击按钮后出现的错误:
08-18 00:08:47.221 2807-2813/? E/jdwp: Failed writing handshake bytes: Broken pipe (-1 of 14)
08-18 00:08:50.341 2807-2807/rjj.manilapuvtravelcompanion E/dalvikvm: Could not find class 'android.graphics.drawable.RippleDrawable', referenced from method android.support.v7.widget.AppCompatImageHelper.hasOverlappingRendering
08-18 00:08:50.821 2807-2807/rjj.manilapuvtravelcompanion E/dalvikvm: Could not find class 'com.google.android.chimera.Activity', referenced from method jx.b
08-18 00:08:58.441 2807-2807/rjj.manilapuvtravelcompanion E/AndroidRuntime: FATAL EXCEPTION: main
Process: rjj.manilapuvtravelcompanion, PID: 2807
java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=1, result=-1, data=Intent { (has extras) }} to activity {rjj.manilapuvtravelcompanion/rjj.manilapuvtravelcompanion.MainActivity}: java.lang.NullPointerException
at android.app.ActivityThread.deliverResults(ActivityThread.java:3365)
at android.app.ActivityThread.handleSendResult(ActivityThread.java:3408)
at android.app.ActivityThread.access$1300(ActivityThread.java:135)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1244)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5017)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.NullPointerException
at rjj.manilapuvtravelcompanion.MainActivity.onActivityResult(MainActivity.java:131)
at android.app.Activity.dispatchActivityResult(Activity.java:5423)
at android.app.ActivityThread.deliverResults(ActivityThread.java:3361)
at android.app.ActivityThread.handleSendResult(ActivityThread.java:3408)
at android.app.ActivityThread.access$1300(ActivityThread.java:135)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1244)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5017)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
at dalvik.system.NativeStart.main(Native Method)
编辑:现在两个都崩溃了。SearchCategory以前工作正常!: 看来我找到了问题的答案,但我真的不知道为什么。好在我总是在尝试新的东西之前复制粘贴我的全部代码 我认为我调用ActivityforResult的代码有问题,因为我在那里做了很多更改 很抱歉,我无法发布这两个关键代码。由于某种原因,我甚至不能重做 但我认为是这样的: 弹出式活动的代码:
Intent intent = new Intent(MainActivity.this, PopUp.class);
intent.putExtra("route", tag);
startActivityForResult(intent, 1);
以及SearchCategoryActivity的代码:
Intent intent = new Intent(MainActivity.this, PopUp.class);
intent.putExtra("route", tag);
startActivityForResult(intent, 1);
Intent i = new Intent(MainActivity.this, SearchCategory.class);
startActivityForResult(i, 0);
我的解决方案是将调用弹出式活动的onClick更改为:
Intent i = new Intent(MainActivity.this, PopUp.class);
i.putExtra("route", tag);
startActivityForResult(i, 0);
只是基本上复制了calling for SearchCategory中的内容,并添加了以下内容:
i.putExtra("route", tag);
MainActivity中的第131行是什么?这是if start.equals1行吗?如果是这种情况,那么在MainActivity中最初在哪里分配start?我只看到它被分配到您的弹出式活动