请问老师,第二个要求因为只做一个菜品的详情,可以不用适配器吗

请问老师,第二个要求因为只做一个菜品的详情,可以不用适配器吗

如果用适配器,还是用baseadapter吗

正在回答

登陆购买课程后可参与讨论,去登陆

5回答

http://img1.sycdn.imooc.com//climg/5cdbd4bd00018ecc05360182.jpg

因为context;它为null呀,肯定是不行的。调整一下,拿到后再试用

http://img1.sycdn.imooc.com//climg/5cdbd54c0001332a05630272.jpg

  • LexieMIZUKI 提问者 #1
    我按照老师说的放到后面还是不行,但是错误就是空指针,为什么呢?
    2019-05-20 19:33:12
  • 好帮手慕雪 回复 提问者 LexieMIZUKI #2
    那就是别的地方还有错误呗,那还得再看截图。你自己也可以按它提示的找一下,谁空指针了!工作中,一定要学会看log报错信息。你跟计算机得双向沟通。不会看log就是单向沟通
    2019-05-21 10:21:35
提问者 LexieMIZUKI 2019-05-15 16:00:23

它显示我创建layoutinflater那一行有错,但是如果绑定数据在解析之后,就只能把绑定数据放在asynctask类里面了,怎么办呢?

package com.lexieluv.homeworkthirteenth;

import android.content.Context;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import android.widget.Toast;

import com.google.gson.Gson;
import com.lexieluv.homeworkthirteenth.adapter.MyAdapter;
import com.lexieluv.homeworkthirteenth.entity.DetailBean;
import com.lexieluv.homeworkthirteenth.entity.FoodBean;
import com.lexieluv.homeworkthirteenth.util.JsonUtils;
import com.lexieluv.homeworkthirteenth.util.NetUtils;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.io.BufferedReader;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

import image.SmartImage;
import image.SmartImageView;

import static com.lexieluv.homeworkthirteenth.util.JsonUtils.parseJson;

public class FoodActivity extends AppCompatActivity {
    private TextView name;
    private SmartImageView img;
    private TextView originalprice;
    private TextView tPrice;
    private TextView price;
    private TextView description;
    
    ExecutorService es;
    String url = "http://www.imooc.com/api/shopping?type=12";

    ArrayList<DetailBean> db = new ArrayList<>();

    @Override
    public void onCreate(Bundle savedInstance) {
        super.onCreate(savedInstance);
        setContentView(R.layout.description);


        //使用线程池来实现异步任务的多线程下载
        es = Executors.newFixedThreadPool(10);
        new Asynctask(db,FoodActivity.this).executeOnExecutor(es,url);
    }
}

//另一个异步任务类下载网络数据的类
class Asynctask extends AsyncTask<String,Void,byte[]> {

    ArrayList<DetailBean> data;
    Context context;
    LayoutInflater layout = LayoutInflater.from(context);
    View view = layout.inflate(R.layout.description,null);
    DetailBean d = new DetailBean();

    public Asynctask(ArrayList<DetailBean> data, Context context) {
        super();
        this.data = data;
        this.context = context;
    }

    @Override
    protected byte[] doInBackground(String... params) {
        return getNetData(params[0]);
    }

    @Override
    protected void onPostExecute(byte[] result){
        super.onPostExecute(result);
        if(result != null){
            //把从网络上获取的byte类型的数据转换为String字符串
            String jsonString = new String(result);
            //用json解析工具来解析该字符串数据
            d = parse(jsonString);
            init();
            //取出data数据,并保存
            data.add(d);
        } else {
            Toast.makeText(context,"网络异常",Toast.LENGTH_SHORT).show();
        }
    }

    void init() {
        TextView name = view.findViewById(R.id.tv_title_second);
        SmartImage img = view.findViewById(R.id.iv_food_second);
        TextView originalprice = view.findViewById(R.id.tv_price_first);
        TextView tPrice = view.findViewById(R.id.tv_price_second);
        TextView price = view.findViewById(R.id.tv_price_third);
        TextView description = view.findViewById(R.id.tv_description);

        name.setText(d.getName());
//        img.setImageUrl(d.getImg());
        originalprice.setText(String.valueOf(d.getOriginalprice()));
        tPrice.setText(String.valueOf(d.getTPrice()));
        price.setText(d.getPrice());
        description.setText(d.getDescription());
    }

    //另一个解析Json数据的方法
    DetailBean parse(String JsonString) {
        Gson gson = new Gson();
        DetailBean db = gson.fromJson(JsonString, DetailBean.class);
        return db;
    }

    //另一个从网站上下载数据的方法
    byte[] getNetData(String urlString) {
        try {
            URL url = new URL(urlString);
            HttpURLConnection huc = (HttpURLConnection) url.openConnection();
            huc.setRequestMethod("GET");
            huc.setReadTimeout(5000);
            huc.setConnectTimeout(5000);

            byte[] result = null;
            if (huc.getResponseCode() == HttpURLConnection.HTTP_OK) {
                InputStream is = huc.getInputStream();
                ByteArrayOutputStream baos = new ByteArrayOutputStream();
                byte[] buffer = new byte[1024];
                int len = 0;
                while ((len = is.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;
    }

}


好帮手慕雪 2019-05-15 15:31:58

http://img1.sycdn.imooc.com//climg/5cdbc03200018d6306820649.jpg

你在解析完之后,绑定db数据呀。类似于上图,但要改为db.

  • 提问者 LexieMIZUKI #1
    出现了新错误,请老师看上面
    2019-05-15 16:00:59
提问者 LexieMIZUKI 2019-05-15 15:18:13

主活动代码

package com.lexieluv.homeworkthirteenth;

import android.content.Context;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import android.widget.Toast;

import com.google.gson.Gson;
import com.lexieluv.homeworkthirteenth.adapter.MyAdapter;
import com.lexieluv.homeworkthirteenth.entity.DetailBean;
import com.lexieluv.homeworkthirteenth.entity.FoodBean;
import com.lexieluv.homeworkthirteenth.util.JsonUtils;
import com.lexieluv.homeworkthirteenth.util.NetUtils;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.io.BufferedReader;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

import image.SmartImageView;

import static com.lexieluv.homeworkthirteenth.util.JsonUtils.parseJson;

public class FoodActivity extends AppCompatActivity {
    private TextView name;
    private SmartImageView img;
    private TextView originalprice;
    private TextView tPrice;
    private TextView price;
    private TextView description;

    private DetailBean detailBean = new DetailBean();
    ExecutorService es;
    String url = "http://www.imooc.com/api/shopping?type=12";

    ArrayList<DetailBean> db = new ArrayList<>();

    @Override
    public void onCreate(Bundle savedInstance) {
        super.onCreate(savedInstance);
        setContentView(R.layout.description);
        name = findViewById(R.id.tv_title_second);
        img = findViewById(R.id.iv_food_second);
        originalprice = findViewById(R.id.tv_price_first);
        tPrice = findViewById(R.id.tv_price_second);
        price = findViewById(R.id.tv_price_third);
        description = findViewById(R.id.tv_description);

        //使用线程池来实现异步任务的多线程下载
        es = Executors.newFixedThreadPool(10);
        new Asynctask(db,FoodActivity.this).executeOnExecutor(es,url);

        name.setText(detailBean.getName());
        img.setImageUrl(detailBean.getImg());
        originalprice.setText(String.valueOf(detailBean.getOriginalprice()));
        tPrice.setText(String.valueOf(detailBean.getTPrice()));
        price.setText(detailBean.getPrice());
        description.setText(detailBean.getDescription());

    }
}

//另一个异步任务类下载网络数据的类
class Asynctask extends AsyncTask<String,Void,byte[]> {

    ArrayList<DetailBean> data;
    Context context;

    public Asynctask(ArrayList<DetailBean> data, Context context) {
        super();
        this.data = data;
        this.context = context;
    }

    @Override
    protected byte[] doInBackground(String... params) {
        return getNetData(params[0]);
    }

    @Override
    protected void onPostExecute(byte[] result){
        super.onPostExecute(result);
        if(result != null){
            //把从网络上获取的byte类型的数据转换为String字符串
            String jsonString = new String(result);
            //用json解析工具来解析该字符串数据
            DetailBean db = parse(jsonString);
            //取出data数据,并保存
            data.add(db);
        } else {
            Toast.makeText(context,"网络异常",Toast.LENGTH_SHORT).show();
        }
    }

    //另一个解析Json数据的方法
    DetailBean parse(String JsonString) {
        Gson gson = new Gson();
        DetailBean db = gson.fromJson(JsonString, DetailBean.class);
        return db;
    }

    //另一个从网站上下载数据的方法
    byte[] getNetData(String urlString) {
        try {
            URL url = new URL(urlString);
            HttpURLConnection huc = (HttpURLConnection) url.openConnection();
            huc.setRequestMethod("GET");
            huc.setReadTimeout(5000);
            huc.setConnectTimeout(5000);

            byte[] result = null;
            if (huc.getResponseCode() == HttpURLConnection.HTTP_OK) {
                InputStream is = huc.getInputStream();
                ByteArrayOutputStream baos = new ByteArrayOutputStream();
                byte[] buffer = new byte[1024];
                int len = 0;
                while ((len = is.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;
    }

}


好帮手慕雪 2019-05-13 10:24:50

嗯嗯,可以不用适配器的。对,如果用,也是用BaseAdapter。祝:学习愉快


  • 提问者 LexieMIZUKI #1
    好的,谢谢老师!
    2019-05-15 13:46:46
  • 提问者 LexieMIZUKI #2
    如果不用适配器,那么在哪里进行数据绑定呢?而且是需要先解析json然后才能绑定吗,如果用gson是不是就不需要解析直接绑定呢?
    2019-05-15 13:52:33
  • 好帮手慕雪 回复 提问者 LexieMIZUKI #3
    是的,先解析json完再绑定。你如果用gson的话解析的话,你给之一个数据模型,它帮助你来解析。然后来绑定。
    2019-05-15 13:59:38
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
Android网络操作与数据存储2018版
  • 参与学习           人
  • 提交作业       307    份
  • 解答问题       1613    个

本专题是联网及数据处理的必备技能。课程从网络基础知识到线程间协同工作、异步下载处理。介绍了Android内外部文件存储、轻量级数据库SQLite的使用。利用屏幕适配、状态保持、百度地图解决实际问题。

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师