我正在为我的应用程序使用片段。我还在片段中添加了一个包,但是当我想从包中获取添加的字符串时,编译器向我显示了一个空指针错误,如下所示
Process: com.softmaker.gazi_opu.personalhealthcare, PID: 3253
java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.lang.String.toString()' on a null object reference
at com.softmaker.gazi_opu.personalhealthcare.fragment.GeneralInformationFragment.setValue(GeneralInformationFragment.java:67)
at com.softmaker.gazi_opu.personalhealthcare.fragment.GeneralInformationFragment.onCreateView(GeneralInformationFragment.java:59)
at android.support.v4.app.Fragment.performCreateView(Fragment.java:1789)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:955)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1138)
at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:740)
at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1501)
at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:458)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5254)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
Run Code Online (Sandbox Code Playgroud)
我添加的代码和获取添加的数据代码如下
public static GeneralInformationFragment getInstance(String profileID){
Bundle bundle = new Bundle();
bundle.putString("profileId",profileID);
GeneralInformationFragment generalFragment = new GeneralInformationFragment();
generalFragment.setArguments(bundle);
return generalFragment;
}
Run Code Online (Sandbox Code Playgroud)
现在从 onCreateMethod 中的这个片段获取数据
String id = getArguments().getString("profileId");
Log.e("ID …Run Code Online (Sandbox Code Playgroud) 调用代码(在服务中运行):
Intent textIntent = new Intent(this, TextActivity.class);
textIntent.putExtra("text_seq", message.xfer.seq);
textIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(textIntent);
Run Code Online (Sandbox Code Playgroud)
被叫代码(in TextActivity):
@Override
protected void onCreate(Bundle bundle) {
super.onCreate(bundle);
Log.d(TAG, "" + bundle.getInt("text_seq"))
...
Run Code Online (Sandbox Code Playgroud)
实际上整个包都丢失了 - 上面的代码在调用时会抛出一个NPE bundle.getInt().
我确信有一些我错过的东西......
我正在使用 Android Studio 3.0.1,它允许检查Bundle对象onSaveInstanceState:
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
}
Run Code Online (Sandbox Code Playgroud)
为此添加一个断点,一旦调试器停止,右键单击Bundle屏幕截图中所示的对象,然后从上下文菜单中选择“显示捆绑对象...”。
然后会打开一个窗口以列出Bundle对象,如下面的屏幕截图所示:
有没有办法找出整个和它的孩子们占据了多少内存Bundle?我想确定更大的块来优化并避免TransactionTooLargeException在 Android >= 7 上抛出。
像 Ubuntu磁盘使用分析器这样的东西会有所帮助 - 请参阅 screeshot:
我想将图像作为位图从一个活动传递到另一个活动.我想知道是否可以这样做.
发送活动
Intent intent = new Intent(getApplicationContext(), BitmapActivity.class);
Bundle b = new Bundle();
b.putParcelable("BITMAP", bitmap);
intent.putExtras(b);
startActivity(intent);
Run Code Online (Sandbox Code Playgroud)
接收活动
Bundle bb = this.getIntent().getExtras();
b = bb.getParcelable("BITMAP");
Run Code Online (Sandbox Code Playgroud)
但我得到了!!! 失败的粘合剂交易!错误
我尝试摆脱此处所述的IntentService处理时间。由于Android O背景限制。但是我无法将带有push info作为参数的Bundle Extras 传递给from 。有什么办法可以将Bundle放入数据中吗?GCMWorkManagerBroadcastReceiverWorkManager
android google-cloud-messaging android-intentservice android-bundle android-workmanager
所以我遇到的问题是我的应用在启动时一直崩溃,我有两个活动。活动A和活动B。我的应用程序在活动A上启动,但是我在活动B中创建了一个包,并将其发送给活动A。因此,当它启动时,该包为空或为null从而崩溃了,我该如何解决?谢谢。
这是在活动A(启动活动)中创建的
Bundle extras = getIntent().getExtras();
Title = extras.getString("Title");
Description = extras.getString("Description");
Price = extras.getString("Price");
Availability = extras.getString("Availability");
Run Code Online (Sandbox Code Playgroud)
然后让我在活动B中创建捆绑包
Intent intent = new Intent(B.this, A.class);
Bundle extras = new Bundle();
extras.putString("Title", PostTitle);
extras.putString("Description", PostDescription);
extras.putString("Price", PostPrice);
extras.putString("Availability", PostAvail);
intent.putExtras(extras);
startActivity(intent);
Run Code Online (Sandbox Code Playgroud) 我正在使用viewpager并创建片段,我想传递arraylist.所以我尝试了以下的事情:
主要活动:
private ArrayList<customers> mArrayList = null;
ViewPagerAdapter adapter = new ViewPagerAdapter(MainActivity.this.getSupportFragmentManager());
adapter.addFrag(NewCustomer.newInstance(mArrayList ), "NewCustomer");
Run Code Online (Sandbox Code Playgroud)
现在在片段类我正在创建实例:
public static final ArrayList<customers> data = new ArrayList<customers>();
public static final NewCustomer newInstance(ArrayList<customers> mArrayList) {
NewCustomer f = new NewCustomer();
Bundle bdl = new Bundle(1);
bdl.putParcelableArrayList(data, mArrayList);
f.setArguments(bdl);
return f;
}
Run Code Online (Sandbox Code Playgroud)
但这不起作用.它在bdl.putParcelableArrayList上显示错误我想获得arraylist并存储到该类的本地arraylist中.
如何使用自定义对象获取arraylist?
如果我没有显式调用onSaveInstanceState(),哪些是可能性,何时savedInstanceState不为null onCreate?
我看到一个选项,当系统在崩溃后重新创建我的应用程序时 - 然后savedInstanceState不是null.
还有哪些其他选择?
android android-lifecycle android-activity android-bundle android-savedstate
我正在尝试通过一个包将两个字符串传递给我的另一个片段.问题是,onCreate中的参数仍为null.这是我的代码:
class VenueDetailFragment : Fragment() {
private lateinit var venueId: String
private lateinit var venueName: String
companion object {
fun newInstance(venue: Venue): VenueDetailFragment {
val frag = VenueDetailFragment()
val bundle = Bundle()
bundle.putString(Extra.VENUE_ID_KEY, venue.id)
bundle.putString(Extra.VENUE_NAME, venue.name)
frag.arguments = bundle
return VenueDetailFragment()
}
}
private lateinit var viewModel: VenueDetailViewModel
override fun onAttach(context: Context) {
super.onAttach(context)
viewModel = ViewModelProviders.of(this).get(VenueDetailViewModel::class.java)
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
arguments?.let {
venueId = it.getString(Extra.VENUE_ID_KEY, "0")
venueName = it.getString(Extra.VENUE_NAME, getString(R.string.venue_detail_title_unknown))
}
}
override fun onCreateView(inflater: LayoutInflater, …Run Code Online (Sandbox Code Playgroud) 一个Bundle可以保存多种类型的数据:short,byte,另一个Bundle,ArrayList<Integer>,但不是简单的long。
如何最好地实现?必须将其转换为ArrayList<Integer>吗?
众所周知,我们可以通过使用将额外信息放入Intent putExtra/putExtras,并将其传递给另一个应用程序.在目的地,我们可以getxxxExtra/getExtras用来获取这些信息.但是,所有这些方法都需要一个密钥.
我想知道是否有办法在没有密钥的情况下获取信息.或者,有没有办法检查已设置到捆绑中的所有密钥?
提前致谢!