Android onCreate时可以收到第三方传递的intent.getStringExtra("");吗
时间: 2024-02-20 07:00:57 浏览: 25
在 Android 的 `onCreate()` 方法中,可以通过 `getIntent()` 方法获取 Activity 接收到的 Intent 对象,然后通过该对象的 `getStringExtra()` 方法获取传递过来的字符串数据。例如:
```java
public class MyActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my);
Intent intent = getIntent();
String data = intent.getStringExtra("key_name");
if (data != null) {
// 处理数据
}
}
}
```
在上述代码中,我们通过 `getIntent()` 方法获取到了 Intent 对象,然后通过 `getStringExtra()` 方法获取传递过来的字符串数据。注意,如果 Intent 中没有对应的数据,`getStringExtra()` 方法会返回 `null`,因此需要进行判断。
相关问题
优化代码public class SecondActivity extends AppCompatActivity { private TextView textView9, textView11, textView13, textView15, textView17, textView19; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_second); Intent intent = getIntent(); String num = intent.getStringExtra("num"); String name = intent.getStringExtra("name"); String score1 = intent.getStringExtra("score1"); String score2 = intent.getStringExtra("score2"); String score3 = intent.getStringExtra("score3"); double average = intent.getDoubleExtra("average", 0); textView9 = findViewById(R.id.textView9); textView11 = findViewById(R.id.textView11); textView13 = findViewById(R.id.textView13); textView15 = findViewById(R.id.textView15); textView17 = findViewById(R.id.textView17); textView19 = findViewById(R.id.textView19); textView9.setText(num); textView11.setText(name); textView13.setText(score1); textView15.setText(score2); textView17.setText(score3); textView19.setText(String.format("%.2f", average)); } }
这段代码已经非常简洁,不过还可以进一步优化:
1. 将 findViewById() 方法的调用放在 onStart() 方法中,避免在 onCreate() 方法中执行过多的操作;
2. 使用 ButterKnife 或者 ViewBinding 来代替 findViewById() 方法,可以进一步简化代码。
下面是使用 ButterKnife 优化后的代码:
```
public class SecondActivity extends AppCompatActivity {
@BindView(R.id.textView9)
TextView textView9;
@BindView(R.id.textView11)
TextView textView11;
@BindView(R.id.textView13)
TextView textView13;
@BindView(R.id.textView15)
TextView textView15;
@BindView(R.id.textView17)
TextView textView17;
@BindView(R.id.textView19)
TextView textView19;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
ButterKnife.bind(this);
Intent intent = getIntent();
String num = intent.getStringExtra("num");
String name = intent.getStringExtra("name");
String score1 = intent.getStringExtra("score1");
String score2 = intent.getStringExtra("score2");
String score3 = intent.getStringExtra("score3");
double average = intent.getDoubleExtra("average", 0);
textView9.setText(num);
textView11.setText(name);
textView13.setText(score1);
textView15.setText(score2);
textView17.setText(score3);
textView19.setText(String.format("%.2f", average));
}
}
```
使用 ViewBinding 优化后的代码:
```
public class SecondActivity extends AppCompatActivity {
private ActivitySecondBinding binding;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
binding = ActivitySecondBinding.inflate(getLayoutInflater());
setContentView(binding.getRoot());
Intent intent = getIntent();
String num = intent.getStringExtra("num");
String name = intent.getStringExtra("name");
String score1 = intent.getStringExtra("score1");
String score2 = intent.getStringExtra("score2");
String score3 = intent.getStringExtra("score3");
double average = intent.getDoubleExtra("average", 0);
binding.textView9.setText(num);
binding.textView11.setText(name);
binding.textView13.setText(score1);
binding.textView15.setText(score2);
binding.textView17.setText(score3);
binding.textView19.setText(String.format("%.2f", average));
}
}
```
使用 ButterKnife 或者 ViewBinding 可以使代码更加简洁易读。
public class NotepadCheckActivity extends Activity { private TextView titleText = null; private TextView contentText = null; private TextView timeText = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.check_notepad); titleText = (TextView)findViewById(R.id.checkTitle); contentText = (TextView)findViewById(R.id.checkContent); timeText = (TextView)findViewById(R.id.checkTime); Intent intent = getIntent();//获取启动该Activity的intent对象 String id = intent.getStringExtra("_id"); String title= intent.getStringExtra("title"); String time= intent.getStringExtra("time"); String content = intent.getStringExtra("content"); long t = Long.parseLong(time); String datetime = DateFormat.format("yyyy-MM-dd kk:mm:ss", t).toString(); this.titleText.setText(title); this.timeText.setText(datetime); this.contentText.setText(content); } }作用
这段代码是一个 Android 应用程序的 Activity 类,用于显示一个记事本的详细内容。它包含了三个 TextView 控件,分别用于显示记事本的标题、内容和时间。在 onCreate 方法中,它首先通过 setContentView 方法将布局文件 R.layout.check_notepad 加载到该 Activity 中,然后通过 findViewById 方法获取三个 TextView 控件的对象,并将它们赋值给对应的成员变量。接着,它从 getIntent 方法获取启动该 Activity 的 Intent 对象,并从 Intent 对象中获取记事本的详细信息,包括 id、title、time 和 content。其中,时间戳需要使用 DateFormat 类将其转换为可读的日期时间格式。最后,它将记事本的标题、时间和内容分别设置到对应的 TextView 控件中,以供用户查看。