正在回答
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 星