我需要在if-statement
中设置2个条件(如果这个或这个),第一个部分从item
获取listview
,另一个if
- part得到第一个activity
的值,如果它是true
那么条件需要。请参阅下面的2个代码,可能会更好地解释它。
putExtra代码
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
TextView thisTextView = (TextView)view.findViewById(R.id.listview_item_title);
String text = (String)thisTextView.getText();
if (text.equals("Category")) {
Intent i = new Intent(Search.this,MainActivity.class);
i.putExtra("sendData", 1);
startActivity(i);
}
}
getExtra Code
public class MainActivity extends Activity implements OnItemClickListener{
//private boolean mainSub,manuSub = false;
private int mainSub=0;
ListView lv;
String [] list;
int mine;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lv = (ListView)findViewById(R.id.listView);
list = getResources().getStringArray(R.array.main);
lv.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, list));
lv.setOnItemClickListener(this);
Intent myIntent = getIntent();
mine = myIntent.getExtras().getInt("sendData");
}
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
Intent i = new Intent(MainActivity.this, SwipeActivity.class);
if (lv.getItemAtPosition(position).toString().equalsIgnoreCase("Search")){
i = new Intent(MainActivity.this, Search.class);
startActivity(i);
}
else if (lv.getItemAtPosition(position).toString().equalsIgnoreCase("Category") || mine == 1) {
lv.setAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,getResources().getStringArray(R.array.Category)));
mainSub = 1;
}
我将putExtra(name,value)
的参数设为name=sendData
value = 1
。然后,当我试图获得Intent
时,程序会给出一个异常但没有启动。我知道错误出现在getExtras
行 - &gt; mine = myIntent.getExtras().getInt("sendData");
但实际上我不知道为什么它似乎是一个错误。因为我认为编码的每一个想法都没问题。
logcat的
05-02 18:06:05.218: D/SecWifiDisplayUtil(11595): Metadata value : none
05-02 18:06:05.293: D/PhoneWindow(11595): *FMB* installDecor mIsFloating : false
05-02 18:06:05.293: D/PhoneWindow(11595): *FMB* installDecor flags : 8454400
05-02 18:06:05.298: D/AbsListView(11595): Get MotionRecognitionManager
05-02 18:06:05.303: E/MotionRecognitionManager(11595): mSContextService = android.hardware.scontext.ISContextService$Stub$Proxy@8bebba7
05-02 18:06:05.303: E/MotionRecognitionManager(11595): motionService = com.samsung.android.motion.IMotionRecognitionService$Stub$Proxy@208cf854
05-02 18:06:05.303: E/MotionRecognitionManager(11595): motionService = com.samsung.android.motion.IMotionRecognitionService$Stub$Proxy@208cf854
05-02 18:06:05.308: D/AndroidRuntime(11595): Shutting down VM
05-02 18:06:05.308: E/AndroidRuntime(11595): FATAL EXCEPTION: main
05-02 18:06:05.308: E/AndroidRuntime(11595): Process: com.example.shaymatest, PID: 11595
05-02 18:06:05.308: E/AndroidRuntime(11595): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.shaymatest/com.example.shaymatest.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'int android.os.Bundle.getInt(java.lang.String)' on a null object reference
05-02 18:06:05.308: E/AndroidRuntime(11595): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3149)
05-02 18:06:05.308: E/AndroidRuntime(11595): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3248)
05-02 18:06:05.308: E/AndroidRuntime(11595): at android.app.ActivityThread.access$1000(ActivityThread.java:197)
05-02 18:06:05.308: E/AndroidRuntime(11595): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1681)
05-02 18:06:05.308: E/AndroidRuntime(11595): at android.os.Handler.dispatchMessage(Handler.java:102)
05-02 18:06:05.308: E/AndroidRuntime(11595): at android.os.Looper.loop(Looper.java:145)
05-02 18:06:05.308: E/AndroidRuntime(11595): at android.app.ActivityThread.main(ActivityThread.java:6872)
05-02 18:06:05.308: E/AndroidRuntime(11595): at java.lang.reflect.Method.invoke(Native Method)
05-02 18:06:05.308: E/AndroidRuntime(11595): at java.lang.reflect.Method.invoke(Method.java:372)
05-02 18:06:05.308: E/AndroidRuntime(11595): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1404)
05-02 18:06:05.308: E/AndroidRuntime(11595): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1199)
05-02 18:06:05.308: E/AndroidRuntime(11595): Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'int android.os.Bundle.getInt(java.lang.String)' on a null object reference
05-02 18:06:05.308: E/AndroidRuntime(11595): at com.example.shaymatest.MainActivity.onCreate(MainActivity.java:35)
05-02 18:06:05.308: E/AndroidRuntime(11595): at android.app.Activity.performCreate(Activity.java:6550)
05-02 18:06:05.308: E/AndroidRuntime(11595): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1120)
05-02 18:06:05.308: E/AndroidRuntime(11595): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3102)
05-02 18:06:05.308: E/AndroidRuntime(11595): ... 10 more
05-02 18:06:05.368: I/Process(11595): Sending signal. PID: 11595 SIG: 9
答案 0 :(得分:1)
当MainActivity的Intent没有额外功能时(例如首次启动应用程序时),您的代码将崩溃。
因此,您需要检查是否有额外的内容。
Bundle extras = getIntent().getExtras();
if (extras != null) {
mine = extras.getInt("sendData");
}
或者,您可以使用getIntent().getIntExtra("sendData", -1)
,其中-1是某个默认值。
答案 1 :(得分:0)
而不是使用getExtras().getInt
使用getIntExtra
答案 2 :(得分:0)
可以通过几种方式启动活动。
1)由启动器启动(您可以在清单文件中验证这一点)
2)以意图开始。
当它由启动器启动时,则mIntent为null。 尝试从中检索额外内容将导致NullPointerException。
我的假设是MainActivity也是您的启动器活动。 如果是这样,那么你应该在使用之前检查mIntent == null。