关于3-2作业的问题

关于3-2作业的问题

public class Json extends AsyncTask<String, Void, String> {

   private FoodRegister mFood;

   public FoodRegister getFood() {
       return mFood;
   }

   @Override
   protected void onPostExecute(String s) {
       mFood = new FoodRegister();
       super.onPostExecute(s);
       try {
           JSONObject jsonObject = new JSONObject(s);
           int mint = jsonObject.getInt("status");
           String mstring = jsonObject.getString("msg");
           JSONObject data = jsonObject.getJSONObject("data");
           String sName = data.getString("name");
           mFood.setName(sName);
           mFood.setDescription(data.getString("description"));
           mFood.setImg(data.getString("img"));
           mFood.setOriginalprice(data.getDouble("originalprice"));
           mFood.setPrice(data.getDouble("price"));
           mFood.settPrice(data.getInt("tPrice"));
           /**
            * 数据都得到了,不知道怎么传回到FoodActivity????
            *
            */
       } catch (JSONException e) {
           e.printStackTrace();
       }
   }

   @Override

   protected String doInBackground(String... strings) {
       try {
           URL url = new URL("http://www.imooc.com/api/shopping?type=12");
           HttpURLConnection connection = (HttpURLConnection) url.openConnection();
           connection.setConnectTimeout(10000);
           connection.setRequestMethod("GET");
           connection.connect();

           int responseCode = connection.getResponseCode();

           if (responseCode == HttpURLConnection.HTTP_OK) {
               InputStreamReader inputStreamReader = new InputStreamReader(connection.getInputStream());
               BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
               StringBuilder stringBuilder = new StringBuilder();
               String line;
               while ((line = bufferedReader.readLine()) != null) {
                   stringBuilder.append(line);
               }
               inputStreamReader.close();
               bufferedReader.close();
               return stringBuilder.toString();
           }
       } catch (MalformedURLException e) {
           e.printStackTrace();
       } catch (IOException e) {
           e.printStackTrace();
       }
       return null;
   }
}



正在回答 回答被采纳积分+1

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

3回答
提问者 郭恒1996 2017-08-25 18:54:25
好帮手慕雪 2017-08-25 11:26:03

foodRegister.getName();是在activity中写的吗?不能写到activity中,就在onPostExecute使用就行了。"数据都得到了,不知道怎么传回到FoodActivity????"不需要返回数据,你需要更机新的UI操作就在onPostExecute()中直接更新就可以了。那怎么得到UI组件呢?例如new AsyncTask(某UI组件)传过来,在类中添加相关属性接收一下。onPostExecute()就可以使用了。祝:学习愉快

  • 提问者 郭恒1996 #1
    嗯嗯,这样做感觉好麻烦呀。foodRegister.getName();是在activity中写的,为什么不能写在Activity 中呢?
    2017-08-25 13:26:54
  • 好帮手慕雪 回复 提问者 郭恒1996 #2
    因为你得等数据获取完才能在UI上做改变呢,如果非得写到activity中也行,那你得多定义一个接口了,完成后在AsyncTask通知接口,activity在接口中实现,更麻烦
    2017-08-25 18:00:58
  • 提问者 郭恒1996 回复 好帮手慕雪 #3
    老师,最后在详情页中implements ResultData,重写sendResultData方法,那我怎么在onCreate中调用这个方法呢。
    2017-08-25 18:59:20
提问者 郭恒1996 2017-08-25 09:21:13
Json json = new Json();
json.execute();
FoodRegister foodRegister = json.getFood();
foodRegister.getName();


  • 提问者 郭恒1996 #1
    首先,我确定在onPostExecute方法中,得到了网络请求数据,在活动中调用时,foodRegister,空指针异常。
    2017-08-25 09:23:30
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

0 星

相似问题

登录后可查看更多问答,登录/注册

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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