Android getIntent.getString();为空

Intent传值问题解析
本文解答了一个常见问题:为何通过Intent传递的数据无法正确获取。详细分析了问题的原因,并给出了最佳实践建议。

今天一个同学问我。说我明明在上一个页面通过intent.putExtra("key ","123");传值了。但是在第二个页面通过getIntent().getStringExtra("key")一直为空。。。问为什么。。。。咦。为什么呢。。我也看了半天。确认确实传值了。intent里面确实有。那为什么取不到呢。。。那答案就只有一个。那就是。存进去的key和取出来的key不一样。。。仔细一看。。果真。。他传值的时候。intent.putExtra("key ","123")key后面加了个空格。。。但是取值的时候。。没有。。。故取值一直为空。。。。气人不。气人。

所以。如果有人问。为什么我存进去一个值。却拿不到。。那答案就真的只有一个。。那就是。你的key和你取的key不一致。。请仔细仔细再仔细的看一看。多加个空格都是不行的。。。所以。最好这种key.定义成一个公共常量。然后每个用的地方都用这个常量。就不会出现这种错误了。

。。。。好吧。。这篇博客是为了凑个数。嗯。现在写的这些话。是为了凑字数。。哈哈哈。日常清闲。。周围的同事都在忙。。只有我很清闲。。。不知道是不是因为还没转正。所以。分配的任务总是简单。估计是怕完成不了。影响进度吧。。。哎。。清闲的时候。我就不知道该干啥。就爱胡思乱想。。仔细想了下。。。当初想逃离上海的急切心情是为什么呢。。现在。是真的真的有点想念。想念那个环境。想念那里的人。想念那里的食物。。嗯。。。虽然在这儿呆的也很好。可是。还是觉得。当初的我。如果换个选择。会不会。哎。。不想了。这就叫贪婪。人心不足蛇吞象。现在就挺好的。继续坚持下去。。。加油!!!

每日语录:

嗯。没有。。。最近在读蔡静的《看见》。看到一篇关于家暴的采访。只觉得触目惊心。然后有了一个反思。只要有了一次家暴。就一定要离婚。不管什么原因。离婚就对了。不要想着说为了给孩子一个完整的家庭。因为。这绝不会是最后一次。你的孩子如果看到了父亲打母亲。会慢慢产生扭曲的心理。所以。为了你自己。为了你的孩子。你需要勇敢的反抗。报警。离婚。要狠狠的给他一个教训。不要害怕。你自己一个人可能养不起自己和孩子。你可以的。你永远比你自己想的强大。。。咦。。现在想来。。还是觉得气愤!!!所以。女孩子。一定要爱护自己。一定要人格独立。一定要有一个可以养活自己的工作。不依附任何人活着。这样。你才能在任何时候都有从头开始的勇气。。。。。最后。愿每个女孩子。都有人爱。如果没有。请自己好好爱自己。。。

单曲循环《末日孤单》

package com.videogo.ui.login; import android.app.AlertDialog; import android.content.Intent; import android.os.Bundle; import android.util.Log; import android.view.View; import android.view.Window; import android.view.WindowManager; import android.widget.Button; import android.widget.DatePicker; import android.widget.ImageButton; import android.widget.RelativeLayout; import android.widget.TextView; import androidx.appcompat.app.AppCompatActivity; import com.videogo.openapi.EZOpenSDK; import com.videogo.widget.TitleBar; import ezviz.ezopensdk.R; import java.util.Calendar; import java.util.Locale; public class FanHui extends AppCompatActivity { private static final String TAG = "EZPreview"; private String mAppKey; private String mDeviceSerial; private String mVerifyCode; private String mAccessToken; private int mCameraNo; private TextView mDateTextView; private int mSelectedYear, mSelectedMonth, mSelectedDay; private static final String KEY_APPKEY = "appkey"; private static final String KEY_SERIAL = "serial"; private static final String KEY_VERIFYCODE = "VerifyCode"; private static final String KEY_ACCESSTOKEN = "accessToken"; private static final String KEY_CAMERANO = "cameraNo"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.ez_playback_list_page); extractParametersFromIntent(); final Calendar calendar = Calendar.getInstance(); mSelectedYear = calendar.get(Calendar.YEAR); mSelectedMonth = calendar.get(Calendar.MONTH); mSelectedDay = calendar.get(Calendar.DAY_OF_MONTH); // 设置日期显示模块 setupDatePicker(); View fanHui = findViewById(R.id.fanhui); fanHui.setOnClickListener(v -> finish()); Button huifangBtn = findViewById(R.id.fanhui); huifangBtn.setOnClickListener(v -> { Intent intent = new Intent(FanHui.this, MainActivity.class); intent.putExtra("deviceSerial", mDeviceSerial); intent.putExtra("cameraNo", mCameraNo); intent.putExtra("accessToken", mAccessToken); intent.putExtra("appkey", mAppKey); intent.putExtra("verifyCode", mVerifyCode); startActivity(intent); }); } private void setupDatePicker() { mDateTextView = findViewById(R.id.date_text); ImageButton datePickerButton = findViewById(R.id.date_picker_button); updateDateDisplay(); datePickerButton.setOnClickListener(v -> showDatePickerDialog()); } private void updateDateDisplay() { String formattedDate = String.format(Locale.getDefault(), "%d年%02d月%02d日", mSelectedYear, mSelectedMonth + 1, // 月份需要+1 mSelectedDay); mDateTextView.setText(formattedDate); } private void showDatePickerDialog() { // 使用与 WeatherInfoActivity 完全一致的创建方式 final AlertDialog dlg = new AlertDialog.Builder(this, R.style.Theme_AppCompat_Dialog).create(); dlg.show(); Window window = dlg.getWindow(); window.setContentView(R.layout.datepicker_layout); // 设置对话框宽度(与 WeatherInfoActivity 一致) WindowManager.LayoutParams lp = window.getAttributes(); lp.width = WindowManager.LayoutParams.MATCH_PARENT; window.setAttributes(lp); // 获取并初始化 DatePicker(关键修复) DatePicker dpPicker = window.findViewById(R.id.dpPicker); // 隐藏不需要的视图(与 WeatherInfoActivity 一致) ViewGroup rootView = (ViewGroup) dpPicker.getChildAt(0); if (rootView != null) { ViewGroup childView = (ViewGroup) rootView.getChildAt(0); if (childView != null) { // 隐藏日选择器 childView.getChildAt(2).setVisibility(View.GONE); // 确保月选择器可见 childView.getChildAt(1).setVisibility(View.VISIBLE); } } dpPicker.init(mSelectedYear, mSelectedMonth, mSelectedDay, null); // 设置按钮事件 RelativeLayout yesButton = window.findViewById(R.id.YES); RelativeLayout noButton = window.findViewById(R.id.NO); yesButton.setOnClickListener(v -> { mSelectedYear = dpPicker.getYear(); mSelectedMonth = dpPicker.getMonth(); mSelectedDay = dpPicker.getDayOfMonth(); updateDateDisplay(); dlg.dismiss(); }); noButton.setOnClickListener(v -> dlg.dismiss()); } private void extractParametersFromIntent() { Bundle extras = getIntent().getExtras(); if (extras != null) { mAppKey = extras.getString(KEY_APPKEY, ""); mDeviceSerial = extras.getString(KEY_SERIAL, ""); mVerifyCode = extras.getString(KEY_VERIFYCODE, ""); mAccessToken = extras.getString(KEY_ACCESSTOKEN, ""); mCameraNo = extras.getInt(KEY_CAMERANO, 0); Log.d(TAG, "Received parameters:"); Log.d(TAG, "AppKey: " + mAppKey); Log.d(TAG, "DeviceSerial: " + mDeviceSerial); Log.d(TAG, "VerifyCode: " + mVerifyCode); Log.d(TAG, "AccessToken: " + mAccessToken); Log.d(TAG, "CameraNo: " + mCameraNo); } else { Log.e(TAG, "No parameters received from intent"); } } } 依据上述代码解决报错:Cannot resolve symbol 'ViewGroup'(报错4次) Cannot resolve method 'getChildAt(int)'(报错3次)。
06-26
分析/* * Copyright (C) 2016 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file * except in compliance with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software distributed under the * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.android.settings.datausage; import android.app.settings.SettingsEnums; import android.content.Context; import android.content.Intent; import android.content.res.TypedArray; import android.net.ConnectivityManager; import android.net.NetworkTemplate; import android.os.Bundle; import android.util.AttributeSet; import androidx.annotation.VisibleForTesting; import androidx.core.content.res.TypedArrayUtils; import androidx.preference.Preference; import com.android.settings.R; import com.android.settings.core.SubSettingLauncher; import com.android.settingslib.net.DataUsageController; public class DataUsagePreference extends Preference implements TemplatePreference { private NetworkTemplate mTemplate; private int mSubId; private int mTitleRes; public DataUsagePreference(Context context, AttributeSet attrs) { super(context, attrs); final TypedArray a = context.obtainStyledAttributes( attrs, new int[] {com.android.internal.R.attr.title}, TypedArrayUtils.getAttr( context, androidx.preference.R.attr.preferenceStyle, android.R.attr.preferenceStyle), 0); mTitleRes = a.getResourceId(0, 0); a.recycle(); } @Override public void setTemplate(NetworkTemplate template, int subId, NetworkServices services) { mTemplate = template; mSubId = subId; final DataUsageController controller = getDataUsageController(); if (mTemplate.isMatchRuleMobile()) { setTitle(R.string.app_cellular_data_usage); } else { final DataUsageController.DataUsageInfo usageInfo = controller.getDataUsageInfo(mTemplate); setTitle(mTitleRes); setSummary(getContext().getString(R.string.data_usage_template, DataUsageUtils.formatDataUsage(getContext(), usageInfo.usageLevel), usageInfo.period)); } final long usageLevel = controller.getHistoricalUsageLevel(template); if (usageLevel > 0L) { setIntent(getIntent()); } else { setIntent(null); setEnabled(false); } } @Override public Intent getIntent() { final Bundle args = new Bundle(); final SubSettingLauncher launcher; args.putParcelable(DataUsageList.EXTRA_NETWORK_TEMPLATE, mTemplate); args.putInt(DataUsageList.EXTRA_SUB_ID, mSubId); args.putInt(DataUsageList.EXTRA_NETWORK_TYPE, mTemplate.isMatchRuleMobile() ? ConnectivityManager.TYPE_MOBILE : ConnectivityManager.TYPE_WIFI); launcher = new SubSettingLauncher(getContext()) .setArguments(args) .setDestination(DataUsageList.class.getName()) .setSourceMetricsCategory(SettingsEnums.PAGE_UNKNOWN); if (mTemplate.isMatchRuleMobile()) { launcher.setTitleRes(R.string.app_cellular_data_usage); } else { launcher.setTitleRes(mTitleRes); } return launcher.toIntent(); } @VisibleForTesting DataUsageController getDataUsageController() { return new DataUsageController(getContext()); } } 关闭WIFI流量用量
最新发布
08-26
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值