为何getContext()有时会回归null?我将上下文LastNewsRVAdapter.java作为参数传递.但LayoutInflater.from(context)有时会崩溃.我在游戏机上收到一些崩溃报告.以下是崩溃报告.
java.lang.NullPointerException
com.example.adapters.LastNewsRVAdapter.<init>
java.lang.NullPointerException:
at android.view.LayoutInflater.from (LayoutInflater.java:211)
at com.example.adapters.LastNewsRVAdapter.<init> (LastNewsRVAdapter.java)
at com.example.fragments.MainFragment$2.onFailure (MainFragment.java)
or .onResponse (MainFragment.java)
at retrofit2.ExecutorCallAdapterFactory$ExecutorCallbackCall$1$1.run
(ExecutorCallAdapterFactory.java)
at android.os.Handler.handleCallback (Handler.java:808)
at android.os.Handler.dispatchMessage (Handler.java:103)
at android.os.Looper.loop (Looper.java:193)
at android.app.ActivityThread.main (ActivityThread.java:5299)
at java.lang.reflect.Method.invokeNative (Method.java)
at java.lang.reflect.Method.invoke (Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run
(ZygoteInit.java:825)
at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:641)
at dalvik.system.NativeStart.main (NativeStart.java)
Run Code Online (Sandbox Code Playgroud)
这是LastNewsRVAdapter.java构造函数.
public LastNewsRVAdapter(Context context, List<LatestNewsData>
latestNewsDataList, FirstPageSideBanner sideBanner) {
this.context = context;
this.latestNewsDataList = latestNewsDataList;
inflater = LayoutInflater.from(context);
this.sideBanner = sideBanner;
}
Run Code Online (Sandbox Code Playgroud)
这是onCreateView …
我刚刚开始使用Dagger 2,我在网上发现了数千个指南,每个指南都有不同的实现,现在我有点困惑.所以基本上这就是我现在写的:
AppModule.java:
@Module
public class AppModule {
Application mApplication;
public AppModule(Application application) {
mApplication = application;
}
@Provides
@Singleton
Application providesApplication() {
return mApplication;
}
}
Run Code Online (Sandbox Code Playgroud)
DataModule.java:
@Module
public class DataModule {
private static final String BASE_URL = "http://beta.fridgewizard.com:9001/api/";
@Provides
@Singleton
NetworkService provideNetworkService() {
return new NetworkService(BASE_URL);
}
@Provides
@Singleton
SharedPreferences provideSharedPreferences(Application app) {
return PreferenceManager.getDefaultSharedPreferences(app);
}
}
Run Code Online (Sandbox Code Playgroud)
PrefsModel.java:
@Module(includes = DataModule.class)
public class PrefsModel {
@Provides
@Singleton
QueryPreferences provideQuery(SharedPreferences prefs) {
return new QueryPreferences(prefs);
}
}
Run Code Online (Sandbox Code Playgroud)
AppComponent.java(我暴露了QueryPreferences对象,因为我需要在演示者中使用它,希望以这种方式正确):
@Singleton …Run Code Online (Sandbox Code Playgroud) 在Fragment.getActivity() 的文档中,它说:Return the FragmentActivity this fragment is currently associated with. May return null if the fragment is associated with a Context instead.
但是片段怎么能不与活动相关联呢?我的意思是,我不是总是需要一个活动来在 Android 中显示任何内容吗?
我正在使用此方法调整Google地图活动中的标记大小:
public Bitmap resizeMapIcons(String iconName,int width, int height){
Bitmap imageBitmap = BitmapFactory.decodeResource(getResources(),getResources().getIdentifier(iconName, "drawable", getPackageName()));
Bitmap resizedBitmap = Bitmap.createScaledBitmap(imageBitmap, width, height, false);
return resizedBitmap;
}
Run Code Online (Sandbox Code Playgroud)
现在我想在MapView的片段中使用它,但是我收到错误"错误:找不到符号方法getPackageName()".可能是什么问题呢?
我从 Firebase Crashlytics 收到异常
Fatal Exception: java.lang.IllegalStateException: Fragment MyFragment{122418b (05b123e6-aa8d-4de4-8f7e-49c95018234b)} not attached to a context.
at androidx.fragment.app.Fragment.requireContext(Fragment.java:774)
at androidx.fragment.app.Fragment.getResources(Fragment.java:838)
at com.timskiy.pregnancy.fragments.MyFragment$1$1.run(MyFragment.java:156)
at android.os.Handler.handleCallback(Handler.java:907)
at android.os.Handler.dispatchMessage(Handler.java:105)
at android.os.Looper.loop(Looper.java:216)
at android.app.ActivityThread.main(ActivityThread.java:7625)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:524)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:987)
Run Code Online (Sandbox Code Playgroud)
片段中的错误行
imageView.setColorFilter(ContextCompat.getColor(getContext(), R.color.blue));
Run Code Online (Sandbox Code Playgroud)
也试过
imageView.setColorFilter(getResources().getColor(R.color.blue));
Run Code Online (Sandbox Code Playgroud)
我在 Activity 和 FragmentStatePagerAdapter 中使用 viewPager。我需要在片段中使用什么上下文来 setColorFilter?谢谢
对于学校我正在制作一个Android应用程序.对于这个应用程序,我有一个片段,它从数据库中显示一个只有字符串的gridview.为此,我需要一个片段.当我调用getActivity()时,它返回null.该onAttach方法,如建议在这里没有得到应用程序崩溃之前调用.我该怎么解决这个问题?
weekFragmetn.xml:
package nl.siebeh.schoolmate;
import java.util.ArrayList;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.util.Log;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.LayoutInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.GridView;
public class weekFragment extends Fragment {
dbLayer db;
Context mContext;
@Override
public void onAttach(Activity activity) {
mContext = getActivity();
Log.i("Schoolmate","onAttach called");
super.onAttach(activity);
}
public weekFragment newInstance(String title) {
Log.i("Schoolmate","newInstance called");
db = new dbLayer(mContext);
weekFragment fragment = new weekFragment();
ArrayList<ArrayList<Object>> result = null;
if(title == "leraren"){
result = …Run Code Online (Sandbox Code Playgroud) 我为Activity编写了Android JUnit测试实例化片段(实际上是制表符).在测试期间,当我尝试对这些选项卡执行任何操作时,它们会崩溃,因为其中的getActivity()方法返回null.实际应用程序(不是测试)从不显示此行为,并且片段getActivity()始终返回正确的父活动.我的测试用例如下:
public class SetupPanelTest extends ActivityUnitTestCase<MyAct> {
FSetup s;
public SetupPanelTest() {
super(MyAct.class);
}
protected void setUp() throws Exception {
super.setUp();
startActivity(new Intent(), null, null);
final MyAct act = getActivity();
AllTabs tabs = act.getTabs();
String tabname = act.getResources().getString(R.string.configuration);
// This method instantiates the activity as said below
s = (FSetup) tabs.showTab(tabname);
FragmentManager m = act.getFragmentManager();
// m.beginTransaction().attach(s).commit();
// ... and even this does not help when commented out
assertTrue(s instanceof FSetup); // Ok
assertEquals(act, s.getActivity()); // Failure
}
public …Run Code Online (Sandbox Code Playgroud) 我有一个片段,我将在其中执行以下操作:
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
}
});
Run Code Online (Sandbox Code Playgroud)
在这里,我收到runOnUiThread了警告may produce NullPointerException。代码可以正常工作。Android Studio 建议我像这样更改代码:
Objects.requireNonNull(getActivity()).runOnUiThread(new Runnable() {
@Override
public void run() {
Run Code Online (Sandbox Code Playgroud)
这是明智的吗?有没有其他/更好的方法?
我目前在我的主要活动中有一个帖子下载东西frow web,然后我需要在下载完成后更新ViewPager中的Fragments.
下载由服务处理,并在完成后广播Intent.
所以,基本上,我的主Activity中的代码是:
public class MyBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
((PositionFragment)mPagerAdapter.getItem(0)).updateUI();
}
}
Run Code Online (Sandbox Code Playgroud)
和我的PositionFragment:
public void updateUI() {
mActivity = getActivity();
Run Code Online (Sandbox Code Playgroud)
我真的不明白这是怎么回事.这听起来很简单,但我必须遗漏一些东西!
任何的想法?
编辑:我的适配器:
public class PageAdapter extends FragmentPagerAdapter {
private List<Fragment> fragments;
public PageAdapter(FragmentManager fm, List<Fragment> fragments) {
super(fm);
this.fragments = fragments;
}
@Override
public Fragment getItem(int position) {
return this.fragments.get(position);
}
@Override
public int getCount() {
return this.fragments.size();
}
@Override
public CharSequence getPageTitle(int position) {
return titles[position];
}
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个样板片段。当我尝试设置 RecyclerView 的 LayoutManager 时,我不断收到空引用错误:
尝试在空对象引用上调用虚拟方法“void android.support.v7.widget.RecyclerView.setLayoutManager(android.support.v7.widget.RecyclerView$LayoutManager)”
以下是我调用以获取错误的顺序:
主类:
public class PagerAdapter extends FragmentPagerAdapter {
...
@Override
public Fragment getItem(int position){
switch(position){
default:
return new WhatsNew();
}
}
}
Run Code Online (Sandbox Code Playgroud)
WhatsNew.class:
public class WhatsNew extends Base {
private LayoutInflater mInflater;
private Handler mHandler = new Handler();
private RecyclerView.LayoutManager mLayoutManager;
@Override
public void init() {
mInflater = LayoutInflater.from(mContext);
mLayoutManager = new LinearLayoutManager(mContext);
mDataView.setLayoutManager(mLayoutManager); //<-- Where the null reference is
}
@Override
public void doWork() {
WhatsNewAdapter mAdapter = new WhatsNewAdapter();
mDataView.setAdapter(mAdapter);
... …Run Code Online (Sandbox Code Playgroud) 当我第一次启动应用程序时,下面的代码工作正常.但是当离开应用程序并再次打开它时,我得到一个错误说getActivity() returns null.
我在片段中执行此代码:
(getActivity()).runOnUiThread(new Runnable() {
@Override
public void run() {
enableMenu();
openMenu();
navigateToFragment(new BlankFragment());
}
});
Run Code Online (Sandbox Code Playgroud)
该怎么办 ?
我怎样才能获得活动?