正在回答
5回答
因为context;它为null呀,肯定是不行的。调整一下,拿到后再试用
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; } }
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; } }
Android网络操作与数据存储2018版
- 参与学习 人
- 提交作业 307 份
- 解答问题 1613 个
本专题是联网及数据处理的必备技能。课程从网络基础知识到线程间协同工作、异步下载处理。介绍了Android内外部文件存储、轻量级数据库SQLite的使用。利用屏幕适配、状态保持、百度地图解决实际问题。
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星