- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
以下是我的 fragment 代码,我得到上面的空异常错误
/**
* Created by USer on 09-04-2016.
*/
public class FeaturedFragment extends android.support.v4.app.Fragment {
private List url;
private SliderLayout sliderLayout;
private GridView gridView;
private int firstVisiblepos;
AppnextAPI api;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View rootView = inflater.inflate(
R.layout.featured, container, false);
url = new ArrayList<String>();
url.add("http://192.168.5.51/Wallpapers/Autumn.jpg");
url.add("http://192.168.5.51/Wallpapers/Tree.jpg");
url.add("http://192.168.5.51/Wallpapers/Flower.jpg");
url.add("http://192.168.5.51/Wallpapers/Lion.jpg");
api = new AppnextAPI(getActivity(), "my id");
sliderLayout = (SliderLayout) rootView.findViewById(R.id.slider);
gridView = (GridView) rootView.findViewById(R.id.gridView);
ThemeShowcase theme = new ThemeShowcase();
theme.execute("getThemes");
for (int i = 0; i < url.size(); i++) {
TextSliderView textSliderView = new TextSliderView(getActivity().getApplicationContext());
textSliderView.image((String) url.get(i));
sliderLayout.addSlider(textSliderView);
}
sliderLayout.setDuration(4000);
sliderLayout.setPresetTransformer(SliderLayout.Transformer.Stack);
return rootView;
}
private class ThemeShowcase extends AsyncTask<String, Integer, ArrayList<ThemeModel>> {
private final String NAMESPACE = "http://tempuri.org/";
private final String URL = "http://192.168.5.51/WebApplication/WebService.asmx";
private final String SOAP_ACTION = "http://tempuri.org/";
private String responseString;
private ArrayList model = null;
private ThemeModel dummy;
@Override
protected void onPreExecute() {
super.onPreExecute();
model = new ArrayList<ThemeModel>();
}
@Override
protected ArrayList<ThemeModel> doInBackground(String... params) {
try {
SoapObject request = new SoapObject(NAMESPACE, params[0]);
PropertyInfo sayHelloPI = new PropertyInfo();
sayHelloPI.setName("page");
sayHelloPI.setValue("1");
sayHelloPI.setType(Integer.class);
request.addProperty(sayHelloPI);
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
SoapEnvelope.VER11);
envelope.dotNet = true;
envelope.setOutputSoapObject(request);
HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);
androidHttpTransport.call(SOAP_ACTION + params[0], envelope);
SoapPrimitive response = (SoapPrimitive) envelope.getResponse();
responseString = response.toString();
if (!responseString.equalsIgnoreCase("Error occured")) {
JSONArray array = new JSONArray(responseString);
for (int i = 0; i < array.length(); i++) {
JSONObject objct = array.getJSONObject(i);
dummy = new ThemeModel();
dummy.preview = objct.getString("Preview");
dummy.name = objct.getString("Name");
model.add(dummy);
}
}
} catch (Exception e) {
model = null;
return model;
}
return model;
}
@Override
protected void onPostExecute(ArrayList<ThemeModel> model) {
if(model!=null) {
gridView.setAdapter(new ImageAdapter(getActivity().getApplicationContext(), model));
firstVisiblepos = gridView.getFirstVisiblePosition();
}else{
try {
Toast.makeText(getActivity().getApplicationContext(), "Site Unreachable", Toast.LENGTH_LONG).show();
}catch (Exception e){
Log.d("MyApp","exception");
}
}
}
}
}
这是我的图像适配器
public class ImageAdapter extends BaseAdapter implements View.OnClickListener{
private Context context;
private LayoutInflater inflater;
private ArrayList<ThemeModel> model;
public ImageAdapter(Context context,ArrayList<ThemeModel> model) {
this.inflater = LayoutInflater.from(context);
this.context = context;
this.model = model;
}
@Override
public int getCount() {
return model.size();
}
@Override
public Object getItem(int position) {
return null;
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
convertView = inflater.inflate(R.layout.custom_item,null);
CardView cardView = (CardView)convertView.findViewById(R.id.cardView);
cardView.setOnClickListener(this);
ImageView imageView = (ImageView)convertView.findViewById(R.id.imageView);
final ProgressBar progressBar = (ProgressBar)convertView.findViewById(R.id.progressbar);
TextView textView = (TextView)convertView.findViewById(R.id.contentName);
ImageButton imageButton = (ImageButton)convertView.findViewById(R.id.downloadButton);
textView.setText(model.get(position).getName());
Picasso.with(context).load(model.get(position).getPreview()).into(imageView, new Callback() {
@Override
public void onSuccess() {
progressBar.setVisibility(View.GONE);
}
@Override
public void onError() {
}
});
return convertView;
}
@Override
public void onClick(View v) {
}
}
我不断地在下面的线上施加压力
gridView.setAdapter(new ImageAdapter(getActivity().getApplicationContext(), model));
错误是
java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.Context android.support.v4.app.FragmentActivity.getApplicationContext()' on a null object reference
我尝试过使用 getActivity()、getContext() 等,但它们都不起作用
最佳答案
原因是因为当你在onPostExecute()
中调用getActivity()
时,Fragment
已经从中分离出来了Activity
(例如,当 AsyncTask 正在执行时,用户单击后退按钮退出 Activity),因此 getActivity()
将为 null。
解决方法是在getActivity()
之前,检查isAdded()
是否为真,如果不为真,说明 fragment 已经分离,调用 >getActivity()
将返回 null。
请记住,在 AsyncTask 中,在调用 getActivity()
之前,您最好再次检查 isAdded()
,因为用户可能会在任何时候退出 Activity AsyncTask 正在执行。
关于android - 尝试在空对象引用上调用虚拟方法 'android.content.Context android.support.v4.app.FragmentActivity.getApplicationContext()',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36615896/
我收到多行错误,指出它有重复的类 Duplicate class android.support.v4.accessibilityservice.AccessibilityServiceInfoCom
我的项目昨天运行良好,今天却出现以下错误。请帮忙。 出了什么问题:无法解析配置“:app:debugCompileClasspath”的所有文件。 Could not find support-v4.
错误:配置项目“:app”时出现问题。 Could not find support-v4.jar (com.android.support:support-v4:24.0.0). Searched
我正在使用 react-native-webrtc 运行示例应用程序模块。我正在尝试在 android 中运行该应用程序,但出现这样的错误... * What went wrong: A probl
错误:配置项目“:app”时出现问题。 Could not find support-v4.jar (com.android.support:support-v4:24.0.0). Searched
我克隆了我的项目并使用 Android studio 打开,但构建失败并出现以下错误并且同一个项目在其他项目上运行良好。 出了什么问题:无法解析配置“:app:flavorUnsignedReleas
我正在运行示例应用程序......我正在使用 this模块.....但是我收到这样的错误... FAILURE: Build failed with an exception. * What went
我有一个 Ionic 项目,在升级到 OSx Mojave 后,出于某种原因不再构建。 该项目基于 Ionic 3 构建。 我有 Cordova CLI 7.0.0 当我运行时 ionic cordo
我有一个 Ionic 项目,在升级到 OSx Mojave 后,出于某种原因不再构建。 该项目基于 Ionic 3 构建。 我有 Cordova CLI 7.0.0 当我运行时 ionic cordo
添加 Android 平台(ionic cordova platform add android)后,我构建了我的 Ionic 项目(ionic cordova build android),但出现错
这个问题在这里已经有了答案: Manifest merger failed : Attribute application@appComponentFactory - Androidx (14 个答
关于我的 Gradle 文件中的以下“complie”: dependencies { compile 'com.android.support:support-v4:25.3.1' }
有些困惑。 我想更频繁地使用@supports 但是...我不关心浏览器如何看待它。希望您能说清楚,如果可以的话谢谢您。 如果浏览器本身不理解@supports,它如何计算@support 'not'
我刚刚升级到 Dart 2 和最新版本的 Flutter,现在我无法构建我的应用程序。我在互联网上环顾四周,但仍然不明白为什么会发生这种情况。 我得到的错误是: FAILURE: Build fail
我正在学习 Firebase,但由于以下错误而陷入困境: Error:Failed to resolve: com.android.support:customtabs:25.4.0 Error:Fa
我在构建本周时出于某种原因尝试使用Cordova进行项目时遇到问题: cordova build android gradle获取com.android.support:support alpha而不
对应的androidx是什么com.android.support:support-compat 的图书馆实现push notifications ? 他们说here它是 androidx 的一部分,
我正在尝试为我的应用设置插桩单元测试。并且我已根据以下开发者站点链接添加了依赖项。 https://developer.android.com/training/testing/unit-testin
当我想使用 Proguard 规则生成签名的 APK(发布)时,我收到了以下错误消息: Cannot find a version of 'com.android.support:support-an
这个问题在这里已经有了答案: Failed to resolve: com.android.support:appcompat-v7:26.0.0 (14 个答案) Failed to resolv
我是一名优秀的程序员,十分优秀!