玩来玩去还是空指针的问题
package com.ygz.tuangou_3_2_homework.adapter;
import android.content.Context;
import android.net.Uri;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import com.ygz.tuangou_3_2_homework.R;
import com.ygz.tuangou_3_2_homework.bean.Menu;
import java.util.List;
/**
* Created by Administrator on 2018/9/9/009.
*/
public class MyListViewAdapter extends BaseAdapter {
private Context context;
private List<Menu.MenuInfo> mMenuInfos;
public MyListViewAdapter(Context context, List<Menu.MenuInfo> mMenuInfos) {
this.context = context;
this.mMenuInfos = mMenuInfos;
}
@Override
public int getCount() {
return mMenuInfos.size();
}
@Override
public Object getItem(int i) {
return mMenuInfos.get(i);
}
@Override
public long getItemId(int i) {
return i;
}
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
MenuViewHolder menuViewHolder = null;
if (view == null){
//初始化holder对象
menuViewHolder = new MenuViewHolder();
//把条目布局转化为view对象
view = View.inflate(context, R.layout.list_item, null);
//初始化holder对象,并初始化holder中的控件
menuViewHolder.mName = view.findViewById(R.id.item_name);
menuViewHolder.mDescription = view.findViewById(R.id.item_description);
menuViewHolder.mPrice = view.findViewById(R.id.item_price);
menuViewHolder.mAction = view.findViewById(R.id.item_action);
menuViewHolder.mCount = view.findViewById(R.id.item_count);
menuViewHolder.mImageView = view.findViewById(R.id.item_iv);
//给当前view做个标记,并把数据存到该tag中
view.setTag(menuViewHolder);
}else {
//如果当前view存在,则直接从中取出其保存的控件及数据
menuViewHolder = (MenuViewHolder) view.getTag();
Menu.MenuInfo menuInfo = mMenuInfos.get(i);
menuViewHolder.mImageView.setImageResource(Integer.parseInt(menuInfo.mImg));
menuViewHolder.mDescription.setText(menuInfo.mDescription);
menuViewHolder.mName.setText(menuInfo.mName);
menuViewHolder.mPrice.setText((int) menuInfo.mPrice);
menuViewHolder.mAction.setText(menuInfo.mAction);
menuViewHolder.mCount.setText(menuInfo.mCount);
}
return view;
}
public class MenuViewHolder {
public TextView mName, mDescription, mPrice, mAction, mCount;
public ImageView mImageView;
}
}
package com.ygz.tuangou_3_2_homework.bean;
import android.graphics.Bitmap;
import java.util.ArrayList;
import java.util.List;
/**
* Created by Administrator on 2018/9/9/009.
*/
public class Menu {
public int mStatus;
public String mMsg;
public List<MenuInfo> mMenuInfos;
/*public String getmMsg() {
return mMsg;
}
public void setmMsg(String mMsg) {
this.mMsg = mMsg;
}
public int getmStatus() {
return mStatus;
}
public void setmStatus(int mStatus) {
this.mStatus = mStatus;
}
public List<MenuInfo> getmMenuInfos() {
return mMenuInfos;
}
public void setmMenuInfos(List<MenuInfo> mMenuInfos) {
this.mMenuInfos = mMenuInfos;
}*/
@Override
public String toString() {
return "Menu{" +
"mStatus=" + mStatus +
", mMsg='" + mMsg + '\'' +
", mMenuInfos=" + mMenuInfos +
'}';
}
public static class MenuInfo {
public int mId;
public int mCount;
public String mName;
public String mImg;
public double mPrice;
public String mDescription;
public String mAction;
/*public int getmId() {
return mId;
}
public void setmId(int mId) {
this.mId = mId;
}
public int getmCount() {
return mCount;
}
public void setmCount(int mCount) {
this.mCount = mCount;
}
public String getmName() {
return mName;
}
public void setmName(String mName) {
this.mName = mName;
}
public String getmImg() {
return mImg;
}
public void setmImg(String mImg) {
this.mImg = mImg;
}
public double getmPrice() {
return mPrice;
}
public void setmPrice(double mPrice) {
this.mPrice = mPrice;
}
public String getmDescription() {
return mDescription;
}
public void setmDescription(String mDescription) {
this.mDescription = mDescription;
}
public String getmAction() {
return mAction;
}
public void setmAction(String mAction) {
this.mAction = mAction;
}*/
@Override
public String toString() {
return "MenuInfo{" +
"mId=" + mId +
", mCount=" + mCount +
", mName='" + mName + '\'' +
", mImg='" + mImg + '\'' +
", mPrice='" + mPrice + '\'' +
", mDescription='" + mDescription + '\'' +
", mAction='" + mAction + '\'' +
'}';
}
}
}
package com.ygz.tuangou_3_2_homework.fragment;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AbsListView;
import android.widget.GridView;
import android.widget.ListView;
import com.ygz.tuangou_3_2_homework.R;
import com.ygz.tuangou_3_2_homework.adapter.MyGridViewAdapter;
import com.ygz.tuangou_3_2_homework.adapter.MyListViewAdapter;
import com.ygz.tuangou_3_2_homework.bean.Menu;
import com.ygz.tuangou_3_2_homework.util.DownAsynctask;
import java.lang.ref.WeakReference;
import java.util.ArrayList;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
/**
* Created by Administrator on 2018/9/7/007.
*/
public class HomeFragment extends Fragment {
public static final String MENU_URL = "http://www.imooc.com/api/shopping?type=11";
private static final String TAG = "HomeFragment";
private View view;
private GridView mGridView;
private MyGridViewAdapter gridViewAdapter;
private MyListViewAdapter listAdapter;
private ListView mListView;
private ArrayList<Menu.MenuInfo> menuInfos;
private boolean flag = false;
private int pageNo = 1;
private ExecutorService es;
private MyHandler mHandler = new MyHandler(this);
int[] images = new int[]{R.drawable.fly1, R.drawable.car, R.drawable.autombile1,
R.drawable.dangao, R.drawable.food, R.drawable.watch, R.drawable.cp, R.drawable.phone};
String[] imagesText = new String[]{"飞机", "车票", "汽车", "蛋糕", "美食", "手表", "电脑", "手机"};
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
view = inflater.inflate(R.layout.fragment_home, container, false);
//使用线程池来实现异步任务的多线程下载
es = Executors.newFixedThreadPool(10);
new DownAsynctask(menuInfos,listAdapter,getActivity()).executeOnExecutor(es, MENU_URL);
initView();
return view;
}
private void initView() {
mGridView = view.findViewById(R.id.gridView);
gridViewAdapter = new MyGridViewAdapter(images,imagesText,getActivity());
mGridView.setAdapter(gridViewAdapter);
mListView = view.findViewById(R.id.list_view);
//存放json解析的数据的集合
menuInfos = new ArrayList<Menu.MenuInfo>();
//自定义适配器
listAdapter = new MyListViewAdapter(getActivity(),menuInfos);
//给listview设置适配器
mListView.setAdapter(listAdapter);
/**
* 对listview设置滚动监听事件,实现分页加载数据
*/
mListView.setOnScrollListener(new AbsListView.OnScrollListener() {
@Override
public void onScrollStateChanged(AbsListView absListView, int scrollState) {
//如果停止了滑动且滑动到了结尾,则更新数据,加载下一页
if (scrollState == AbsListView.OnScrollListener.SCROLL_STATE_IDLE && flag == true) {
pageNo += 1;
new DownAsynctask(menuInfos,listAdapter,getActivity()).executeOnExecutor(es, MENU_URL);
}
}
@Override
public void onScroll(AbsListView absListView, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
//判断是否滑动到了结尾
if (firstVisibleItem + visibleItemCount == totalItemCount) {
flag = true;
}else {
flag = false;
}
}
});
}
private static class MyHandler extends Handler{
WeakReference<HomeFragment> mWeakReference;
public MyHandler(HomeFragment activity) {
mWeakReference = new WeakReference<HomeFragment>(activity);
}
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
if (msg.what ==123){
String result = (String) msg.obj;
HomeFragment activity = mWeakReference.get();
}
}
}
}
package com.ygz.tuangou_3_2_homework.util;
import android.content.Context;
import android.os.AsyncTask;
import android.widget.Toast;
import com.ygz.tuangou_3_2_homework.adapter.MyListViewAdapter;
import com.ygz.tuangou_3_2_homework.bean.Menu;
import java.util.ArrayList;
import java.util.List;
/**
* Created by Administrator on 2018/9/9/009.
*/
public class DownAsynctask extends AsyncTask<String,Void,byte[]> {
private List<Menu.MenuInfo> mMenuInfos = new ArrayList<>();
private MyListViewAdapter listViewAdapter;
private Context context;
public DownAsynctask(List<Menu.MenuInfo> mMenuInfos, MyListViewAdapter listViewAdapter, Context context) {
this.mMenuInfos = mMenuInfos;
this.listViewAdapter = listViewAdapter;
this.context = context;
}
/**
* 当主线程中调用executeOnExecutor方法或execute方法时,会调用此方法
*
* @param strings
* @return
*/
@Override
protected byte[] doInBackground(String... strings) {
//下载网络数据
return NetUtils.getNetData(strings[0]);
}
/**
* doInBackground方法执行之后会执行此方法,并把结果传过来
*
* @param result
*/
@Override
protected void onPostExecute(byte[] result) {
super.onPostExecute(result);
if (result != null) {
//把从网络上获取的byte类型的数据转换为String字符串
String jsonString = new String(result);
//用json解析工具来解析该字符串数据
Menu menu = JsonUtils.parseJson(jsonString);
//取出mMenuInfos数据,并保存到集合中
mMenuInfos.addAll(menu.mMenuInfos);
//刷新数据
listViewAdapter.notifyDataSetChanged();
}else {
Toast.makeText(context, "网络异常", Toast.LENGTH_SHORT).show();
}
}
}
package com.ygz.tuangou_3_2_homework.util;
import com.google.gson.Gson;
import com.ygz.tuangou_3_2_homework.bean.Menu;
/**
* Created by Administrator on 2018/9/9/009.
*/
public class JsonUtils {
public static Menu parseJson(String jsonString){
Gson gson = new Gson();
Menu menu = gson.fromJson(jsonString,Menu.class);
return menu;
}
}
package com.ygz.tuangou_3_2_homework.util;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
/**
* Created by Administrator on 2018/9/9/009.
*/
public class NetUtils {
public static byte[] getNetData(String urlString){
try {
URL url = new URL(urlString);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
connection.setConnectTimeout(5000);
connection.setConnectTimeout(5000);
byte[] result = null;
if (connection.getResponseCode() ==200){
InputStream inputStream = connection.getInputStream();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int len = 0;
while ((len = inputStream.read(buffer))!=-1){
baos.write(buffer,0,len);
}
result = baos.toByteArray();
return result;
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
}
正在回答 回答被采纳积分+1
- 参与学习 人
- 提交作业 307 份
- 解答问题 1613 个
本专题是联网及数据处理的必备技能。课程从网络基础知识到线程间协同工作、异步下载处理。介绍了Android内外部文件存储、轻量级数据库SQLite的使用。利用屏幕适配、状态保持、百度地图解决实际问题。
了解课程





恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星