`
ForgetLove
  • 浏览: 24419 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

view的空指针异常,listview加载数据底部添加按钮

 
阅读更多

listview数据加载后底部添加按钮:

先写一个xml文件,里面添加按钮控件,如下listbutton。xml,按钮居中对齐的哦。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:gravity="center_vertical|center_horizontal"
    android:layout_gravity="center_vertical|center_horizontal"
    android:orientation="horizontal" >
   
  <Button
     android:id="@+id/lastButton"
     android:layout_width="wrap_content"
     android:layout_height="30px"
     android:gravity="center_vertical"
     android:layout_marginTop="5px"
     android:text="上一页"
     android:onClick="lastPageDate"/>
 
  <TextView
      android:id="@+id/counTe"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:gravity="center_vertical"
      android:text=""
      />
 
  <Button
     android:id="@+id/nextButton"
     android:layout_width="wrap_content"
     android:layout_height="30px"
     android:layout_gravity="center_vertical"
     android:layout_marginTop="5px"
     android:layout_marginLeft="10px"
     android:text="下一页"
     android:onClick="nextPageDate"/>
</LinearLayout>

 

 

 

放listview的那个xml就不展示了,因为很简单,只是在界面里加一个listview。不过必须设置android:layout_width="fill_parent",否则按钮无法居中。

下面就是后台代码了。

MainActivity。java。

 

package com.example.dbconnectiontest;

/*必须引用apache.http相关类来创建HTTP连接*/
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.security.auth.PrivateCredentialPermission;

import org.apache.http.Header;
import org.apache.http.HttpRequest;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.protocol.HTTP;
import org.apache.http.util.EntityUtils;

import com.example.dbconnectiontest.entity.people;
import com.example.dbconnectiontest.jsonto.JsonToList;

import android.R.integer;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.TextView;
import android.widget.Toast;
/* 必须引用java.io与java.util相关类来读写文件*/

public class MainActivity extends Activity {

 private static final String TAG = "MainActivity";
 private static final String URL2 = "http://192.168.1.101:8080/BootStarpImage/getList.action";
 static int index = 1;//存放页码
 static int indexCount = 5;//存放总页码
 Button seButton,lastButton,nextButton;//获取数据按钮,上一页,下一页按钮
 TextView counTextView;//显示页码
 ListView lView;//listview
 View buView; //获取listview底部按钮的xml
 private int[] lay = new int[4];//存放实体类对象的text数组
 private List data = new ArrayList();//存放获取到的数据
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  seButton = (Button)findViewById(R.id.btnOne);
  seButton.setOnClickListener(new clicklist());
  lView = (ListView)findViewById(R.id.listview);
  /**
   * 在listview底部添加按钮
   */
  buView = getLayoutInflater().inflate(R.layout.listbutton, null);
  lView.addFooterView(buView);
  
  /**
   * 必须放在lview后面,先添加listview才能找到listview上的控件,否则抛出空指针异常
   */
  lastButton = (Button)findViewById(R.id.lastButton);
  nextButton = (Button)findViewById(R.id.nextButton);
  counTextView = (TextView)findViewById(R.id.counTe);
 }
 


/**
 {"people":[{"firstName": "Brett", "lastName":"McLaughlin", "email": "aaaa" }, { "firstName": "Jason", "lastName":"Hunter", "email": "bbbb"},{ "firstName": "Elliotte","lastName":"Harold", "email": "cccc" }]}
 */
 @Override
 public boolean onCreateOptionsMenu(Menu menu) {
  // Inflate the menu; this adds items to the action bar if it is present.
  getMenuInflater().inflate(R.menu.main, menu);
  return true;
 }
 
 class clicklist implements OnClickListener{

  @Override
  public void onClick(View v) {
   String urlString = URL2 + "?index=1";
   String string = httpToServiceSelectData(urlString);
   listToData(string);
   /**
    * 查询总页码
    */
//   urlString = "";
//   string = httpToServiceSelectData(urlString);
      setPageButton(v);此处必须传入v及view,否则后续报出关于view的空指针
  }

 }

 /**
  * 请求数据 传入一个url
  * @param urlString
  */
 private String httpToServiceSelectData(String urlString) {
  HttpClient client=new DefaultHttpClient(); 
        //创建一个GET请求
        HttpGet httpGet=new HttpGet(urlString);
        //向服务器发送请求并获取服务器返回的结果  
        HttpResponse response;
  try {
   response = client.execute(httpGet);
   int staCode = response.getStatusLine().getStatusCode();
   if(staCode == 200){
    //返回的结果可能放到InputStream,http Header中等。
    String string  = EntityUtils.toString(response.getEntity(),HTTP.UTF_8);
    return string;//返回读取到的数据,用其它方法进行转换成实体
   }else if(staCode == 404)
    Toast.makeText(getApplicationContext(), "服务器异常,请稍候再试。", Toast.LENGTH_SHORT).show();
   else if (staCode == 500)
    Toast.makeText(getApplicationContext(), "读取数据失败,请稍候查询。", Toast.LENGTH_SHORT).show();
  } catch (ClientProtocolException e1) {
   e1.printStackTrace();
  } catch (IllegalStateException e1) {
   e1.printStackTrace();
  } catch (IOException e1) {
   e1.printStackTrace();
  } catch (Exception e) {
   e.printStackTrace();
  }
  return null;
 }
 
 /**
  * 将查询到的数据添加到listview中
  * @param string 返回的字符串(转成过的)
  */
 private void listToData(String string) {
  JsonToList jToList = new JsonToList();
  List<people> li = jToList.returnListView(string);此处调用的是一个java类中的方法,自己写的,代码就几行。要的在下面
  for (people ent : li) {
   Map<String, String> map = new HashMap<String, String>();
   map.put("id", ent.getId()+"");
   map.put("firstName", ent.getFirstName());
   map.put("lastName", ent.getLastName());
   map.put("email", ent.getEmail());
   data.add(map);
  }
  SimpleAdapter sAdapter = new SimpleAdapter(MainActivity.this, data, R.layout.listview, new String[]{"id","firstName","lastName","email"}, new int[]{R.id.ids,R.id.firstName,R.id.lastName,R.id.email});
  sAdapter.notifyDataSetChanged();//增加或删除操作进行后调用该方法,更改listview中的数据,否则会一直往listview下方添加
  lView.setAdapter(sAdapter);
 }
 
 //设置页码信息,以及按钮的是否可点击
 private void setPageButton(View view) {
  counTextView.setText(index + "/" + indexCount);//设置页码数
  if(index == 1)
   lastButton.setClickable(false);
  else
   lastButton.setClickable(true);
  if(index == indexCount)
   nextButton.setClickable(false);
  else
   nextButton.setClickable(true);
 }
 
 @Override
 protected void onDestroy() {
  super.onDestroy();
 }
 
 //点击过按钮过后,加载数据时按钮不可用
 public void setButtonAll(Button lastButton,Button nextButton) {
  lastButton.setClickable(false);
  nextButton.setClickable(false);
 }
 /**
  * 上一页按钮点击事件
  * @param view
  */
 public void lastPageDate(View view) {
//  setButtonAll(lastButton,nextButton);
  if (index > 1) {
   index--;
//   String url = "";
//   String string = httpToServiceSelectData(url);
//   listToData(string);//设置数据
   setPageButton(view);
  }
 }
 
 /**
  * 下一页按钮点击事件
  * @param view
  */
 public void nextPageDate(View view) {
//  setButtonAll(lastButton,nextButton);
  if (index < indexCount) {
   index++;
//   String url = "";
//   String string = httpToServiceSelectData(url);
//   listToData(string);//设置数据
   Toast.makeText(MainActivity.this, index+"", Toast.LENGTH_SHORT).show();//此处的index必须+“”,转换为字符串,否则报错
   System.out.println(index++);
   setPageButton(view);
  }
 }
}


 

 

 

JsonToList。java

 

public class JsonToList {
 public List<people> returnListView(String string) {
  java.lang.reflect.Type type = new com.google.gson.reflect.TypeToken<List<people>>(){}.getType();
  Gson gson = new Gson();
  List<people> list = gson.fromJson(string, type);
  return list;
 }
}

 

 

 

下面来看一下关于view的错误。例如上面的setPageButton(View view)方法变为setPageButton()就会报错。

 

分享到:
评论

相关推荐

    Android 实现ListView滚动到底部自动加载数据

    当用户滚动到ListView的底部时,自动加载更多数据的功能通常被称为“无限滚动”或“下拉加载更多”。这种功能可以提升用户体验,避免用户手动翻页。下面我们将详细讨论如何在Android中实现这个功能。 首先,你需要...

    ListView滚动到底部自动加载剩余数据

    当用户滚动到ListView的底部时,自动加载更多的数据功能通常被称为“无限滚动”或“下拉加载更多”。这个特性提高了用户体验,避免了用户手动刷新或点击加载按钮来获取新数据的不便。下面将详细解释如何实现ListView...

    C# Winform ListView添加按钮列

    为了实现“C# Winform ListView添加按钮列”,我们需要对`ListView`进行扩展或使用第三方库,例如在本例中提到的CXListView。 `ListView`控件的基础用法包括创建列、添加项和设置项的属性。默认情况下,它只能显示...

    ListView动态加载数据分页

    在Android开发中,ListView是一种常见的UI组件,用于展示大量数据列表。当数据量过大时,一次性加载所有数据可能会导致...在实际应用中,还需要考虑错误处理、空数据提示、加载状态显示等细节,以提供完善的用户体验。

    listview添加图片按钮 及按钮跟ListView双监听

    本文将深入探讨如何在ListView中添加图片和按钮,并实现它们以及ListView的双监听,以便按钮点击时能触发Activity的跳转。 首先,我们需要创建一个自定义的ListView适配器,通常会继承自BaseAdapter。在这个适配器...

    分别设置listview加载中、空数据、加载数据失败三种状态的显示

    这篇博客"分别设置listview加载中、空数据、加载数据失败三种状态的显示"正是指导开发者如何处理这些情况的。 首先,我们需要理解ListView的基本结构。ListView通常与Adapter配合使用,Adapter负责将数据源绑定到...

    listview添加按钮

    在“listview添加按钮”的场景下,我们通常会在ListView的底部或者顶部添加一个按钮,以供用户执行特定的操作,比如添加新的数据项。这个功能对于许多应用,如通讯录、任务列表或购物车等,都是至关重要的。 首先,...

    listview加载网络数据

    Adapter是桥梁,它负责将数据转化为ListView可显示的View,并处理用户交互。常见的Adapter有BaseAdapter、ArrayAdapter等。 网络数据加载通常涉及HTTP请求,Android提供了多种方式实现,如HttpURLConnection、...

    Android ListView滚动到底部自动加载数据

    7. **异常处理**:在数据加载过程中,可能出现网络错误、服务器异常等情况,需要做好错误处理和提示,如显示错误信息、重试按钮等。 通过以上步骤,我们可以实现一个功能完善的ListView滚动到底部自动加载数据的...

    安卓listview相关相关-listview滑动到底部自动加载数据并显示滚动的底部的那个条目点击按钮回到顶部.zip

    实现方法是监听ListView的OnScrollListener事件,当监听到ListView已经滑动到最后一项时,触发加载新数据的逻辑,然后将新数据添加到Adapter中,通知ListView更新数据。 2. **滚动条目**: 提及的“滚动的底部的...

    C#,winform,listView动态插入数据

    // 遍历结果集并将数据添加到ListView中 while (dr.Read()) { string name = dr.GetString(0); ListViewItem item = new ListViewItem(name); listView1.Items.Add(item); } // 关闭连接 dr.Close(); conn.Close...

    android listview滑动到底部加载数据

    当数据加载完成后,将新数据添加到列表中,并更新状态。 5. **进度条显示**: 当数据正在加载时,可以在ListView的底部显示一个进度条,指示用户数据正在加载。当加载完成,隐藏进度条并显示新的内容。 6. **优化...

    listview实现动态加载

    "ListView实现动态加载"这个主题,涉及到的是如何高效地处理大量数据并根据用户滚动时动态加载更多内容的技术。动态加载通常用于节省内存,提高用户体验,避免一次性加载过多数据导致应用卡顿。 1. **ListView基础*...

    listview分页 -- 底部加载更多

    8. **错误处理**:当网络请求失败或数据加载异常时,需要提供合适的错误提示,例如显示错误信息或重试按钮。同时,要确保用户可以取消加载更多的操作,防止无限循环加载。 综上所述,实现ListView的分页加载“底部...

    安卓listview相关相关-Listview分页加载数据.rar

    4. Footerview:在ListView的底部添加一个Footerview,作为加载更多的提示,加载中时展示加载动画,加载完成或失败时展示相应提示。 三、注意事项 1. 数据刷新:在获取到新的数据后,需要正确地更新Adapter的数据...

    listview加载更多

    - **加载更多数据**:当到达底部时,调用加载更多数据的方法,例如从网络或本地数据库获取新数据,然后将这些数据添加到数据源并调用`adapter.notifyDataSetChanged()`更新ListView。 3. **优化体验** - **防止...

    ListView中动态添加数据

    总结,动态添加数据到Android的ListView涉及以下几个关键步骤:创建数据模型,实现自定义Adapter,设置ListView和Adapter,向数据源添加新数据并通知Adapter,以及考虑性能优化措施。通过熟练掌握这些技巧,开发者...

    listview分页加载(底部loading)

    一旦数据加载完成,新条目将被添加到ListView中,并更新Footer状态,通常会显示“加载完毕”或者隐藏Footer。 接下来,我们探讨如何实现这个功能。通常分为以下几个步骤: 1. **创建Footer视图**:在XML布局文件中...

    ListView加头部底部的测试

    然而,在实际应用中,我们往往需要在ListView的顶部和底部添加自定义视图,例如广告条、筛选器或者加载更多按钮。本教程将详细介绍如何在ListView中添加头部和底部,以及解决由此引发的点击错位问题。 1. **添加...

    Android 为ListView每个Item上面的按钮添加事件

    ListView通过Adapter来绑定数据和视图,Adapter负责将数据转化为ListView可以显示的View。在每个Item中,我们通常会创建一个布局文件,该布局文件包含TextView和Button等元素。 为了给每个Item的Button添加点击事件...

Global site tag (gtag.js) - Google Analytics