以下是我的 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/
我正在学习如何使用Nokogiri,根据这段代码我遇到了一些问题:require'rubygems'require'mechanize'post_agent=WWW::Mechanize.newpost_page=post_agent.get('http://www.vbulletin.org/forum/showthread.php?t=230708')puts"\nabsolutepathwithtbodygivesnil"putspost_page.parser.xpath('/html/body/div/div/div/div/div/table/tbody/tr/td/div
总的来说,我对ruby还比较陌生,我正在为我正在创建的对象编写一些rspec测试用例。许多测试用例都非常基础,我只是想确保正确填充和返回值。我想知道是否有办法使用循环结构来执行此操作。不必为我要测试的每个方法都设置一个assertEquals。例如:describeitem,"TestingtheItem"doit"willhaveanullvaluetostart"doitem=Item.new#HereIcoulddotheitem.name.shouldbe_nil#thenIcoulddoitem.category.shouldbe_nilendend但我想要一些方法来使用
类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc
我正在尝试设置一个puppet节点,但rubygems似乎不正常。如果我通过它自己的二进制文件(/usr/lib/ruby/gems/1.8/gems/facter-1.5.8/bin/facter)在cli上运行facter,它工作正常,但如果我通过由rubygems(/usr/bin/facter)安装的二进制文件,它抛出:/usr/lib/ruby/1.8/facter/uptime.rb:11:undefinedmethod`get_uptime'forFacter::Util::Uptime:Module(NoMethodError)from/usr/lib/ruby
我正在尝试测试是否存在表单。我是Rails新手。我的new.html.erb_spec.rb文件的内容是:require'spec_helper'describe"messages/new.html.erb"doit"shouldrendertheform"dorender'/messages/new.html.erb'reponse.shouldhave_form_putting_to(@message)with_submit_buttonendendView本身,new.html.erb,有代码:当我运行rspec时,它失败了:1)messages/new.html.erbshou
我在我的项目目录中完成了compasscreate.和compassinitrails。几个问题:我已将我的.sass文件放在public/stylesheets中。这是放置它们的正确位置吗?当我运行compasswatch时,它不会自动编译这些.sass文件。我必须手动指定文件:compasswatchpublic/stylesheets/myfile.sass等。如何让它自动运行?文件ie.css、print.css和screen.css已放在stylesheets/compiled。如何在编译后不让它们重新出现的情况下删除它们?我自己编译的.sass文件编译成compiled/t
我想了解Ruby方法methods()是如何工作的。我尝试使用“ruby方法”在Google上搜索,但这不是我需要的。我也看过ruby-doc.org,但我没有找到这种方法。你能详细解释一下它是如何工作的或者给我一个链接吗?更新我用methods()方法做了实验,得到了这样的结果:'labrat'代码classFirstdeffirst_instance_mymethodenddefself.first_class_mymethodendendclassSecond使用类#returnsavailablemethodslistforclassandancestorsputsSeco
我在我的项目中添加了一个系统来重置用户密码并通过电子邮件将密码发送给他,以防他忘记密码。昨天它运行良好(当我实现它时)。当我今天尝试启动服务器时,出现以下错误。=>BootingWEBrick=>Rails3.2.1applicationstartingindevelopmentonhttp://0.0.0.0:3000=>Callwith-dtodetach=>Ctrl-CtoshutdownserverExiting/Users/vinayshenoy/.rvm/gems/ruby-1.9.3-p0/gems/actionmailer-3.2.1/lib/action_mailer
设置:狂欢ruby1.9.2高线(1.6.13)描述:我已经相当习惯在其他一些项目中使用highline,但已经有几个月没有使用它了。现在,在Ruby1.9.2上全新安装时,它似乎不允许在同一行回答提示。所以以前我会看到类似的东西:require"highline/import"ask"Whatisyourfavoritecolor?"并得到:Whatisyourfavoritecolor?|现在我看到类似的东西:Whatisyourfavoritecolor?|竖线(|)符号是我的终端光标。知道为什么会发生这种变化吗? 最佳答案
在MRIRuby中我可以这样做:deftransferinternal_server=self.init_serverpid=forkdointernal_server.runend#Maketheserverprocessrunindependently.Process.detach(pid)internal_client=self.init_client#Dootherstuffwithconnectingtointernal_server...internal_client.post('somedata')ensure#KillserverProcess.kill('KILL',