救救孩子吧!!!!!!!!!!!!!!!!!!

救救孩子吧!!!!!!!!!!!!!!!!!!

package com.example.group_buying;

import androidx.appcompat.app.AppCompatActivity;
import androidx.core.content.res.ResourcesCompat;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.drawable.Drawable;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.StrictMode;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListView;

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

import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
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.List;

public class MainActivity extends AppCompatActivity {
   private ListView appListView;
   private ListView appListView2;
   private LayoutInflater inflater;
   bitmapc[] bitmapc=new bitmapc[6];

   @Override
   protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_main);

       if (android.os.Build.VERSION.SDK_INT > 9) {
           StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
           StrictMode.setThreadPolicy(policy);
       }

     /*  inflater=(LayoutInflater)getSystemService(LAYOUT_INFLATER_SERVICE);
       View view=inflater.inflate(R.layout.activity_main, null);
       ListView appListView=(ListView)view.findViewById(R.id.app_list_view);*/
       appListView = (ListView) findViewById(R.id.main_list_view);
       List<Drawable> list=new ArrayList<>();
       list.add(ResourcesCompat.getDrawable(getResources(), R.drawable.cake, null));
       list.add(ResourcesCompat.getDrawable(getResources(), R.drawable.autombile1, null));
       appListView.setAdapter(new ApplistAdapter(list));

       appListView2 = (ListView) findViewById(R.id.main_list_view2);
       new RequestDataAsyncTask().execute();
   }

   public class RequestDataAsyncTask extends AsyncTask<Void,Void,String> {
       @Override
       protected void onPreExecute() {
           super.onPreExecute();
           //
       }
       @Override
       protected String doInBackground(Void... voids) {
           String s=request("http://www.imooc.com/api/shopping?type=11");
           try {
               JSONObject jsonObject=new JSONObject(s);
               JSONArray dataArray=jsonObject.getJSONArray("data");
               URL url=null;
               Bitmap bitmap;
               for (int i = 0; i <dataArray.length() ; i++) {
                   LessonResult.LessonInfo lessonInfo=new LessonResult.LessonInfo();
                   JSONObject tempJSONObject= (JSONObject) dataArray.get(i);//这里还要使用JSONObject的原理数组里面每一个都是JSON格式的对象,所以还需要对他进行JSON的解析
                   url = new URL(tempJSONObject.getString("img"));
                   HttpURLConnection conn = (HttpURLConnection) url.openConnection();
                   conn.setConnectTimeout(5000);
                   conn.setRequestMethod("GET");
                   int code=conn.getResponseCode();
                   if (conn.getResponseCode() == 200) {
                       InputStream inputStream = conn.getInputStream();

                       byte[] bytes=toByteArray(inputStream);
                       bitmap =BitmapFactory.decodeByteArray(bytes,0,bytes.length);
                       if(bitmap!=null)
                       {
                       bitmapc[i].setBitmap(bitmap);
                       inputStream.close();
                       }
                   }
               }
           } catch (JSONException e) {
               e.printStackTrace();
           } catch (IOException e) {
               e.printStackTrace();
           }
           return  request("http://www.imooc.com/api/shopping?type=11");
       }

       public byte[] toByteArray(InputStream input) throws IOException {

           ByteArrayOutputStream output = new ByteArrayOutputStream();

           byte[] buffer = new byte[4096];

           int n = 0;

           while (-1 != (n = input.read(buffer))) {

               output.write(buffer, 0, n);

           }

           return output.toByteArray();

       }

       private String request(String s) {
           try {
               URL url=new URL(s);
               HttpURLConnection connection= (HttpURLConnection) url.openConnection();
               connection.setConnectTimeout(30000);
               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)//读并赋值给line
                   {
                       stringBuilder.append(line);
                   }
                   inputStreamReader.close();
                   return stringBuilder.toString();
               }
           } catch (MalformedURLException e) {
               e.printStackTrace();
           } catch (IOException e) {
               e.printStackTrace();
           }
           return  null;
       }

       @Override
       protected void onPostExecute(String result) {
           super.onPostExecute(result);
           //处理返回来的字符串
           LessonResult lessonResult=new LessonResult();
           try {
               JSONObject jsonObject=new JSONObject(result);
               lessonResult.setmStatus(jsonObject.getInt("status"));
               List<LessonResult.LessonInfo> lessonInfos=new ArrayList<>();
               JSONArray dataArray=jsonObject.getJSONArray("data");
               for (int i = 0; i <dataArray.length() ; i++) {
                   LessonResult.LessonInfo lessonInfo=new LessonResult.LessonInfo();
                   JSONObject tempJSONObject= (JSONObject) dataArray.get(i);//这里还要使用JSONObject的原理数组里面每一个都是JSON格式的对象,所以还需要对他进行JSON的解析
                   lessonInfo.setId(tempJSONObject.getString("id"));
                   lessonInfo.setFoodname(tempJSONObject.getString("name"));
                   lessonInfo.setPictureurl( tempJSONObject.getString("img"));
                   lessonInfo.setCount( tempJSONObject.getString("count"));
                   lessonInfo.setBitmap(bitmapc[i].getBitmap());
                   lessonInfo.setPrice( tempJSONObject.getString("price"));
                   lessonInfo.setAction( tempJSONObject.getString("action"));
                   lessonInfo.setDescription( tempJSONObject.getString("description"));
                   lessonInfos.add(lessonInfo);
               }
               lessonResult.setmLessonInfoList(lessonInfos);
           } catch (JSONException e) {
               e.printStackTrace();
           }
           appListView2.setAdapter(new menuAdapter(MainActivity.this,lessonResult.getmLessonInfoList()));
       }

   }

   public  class ApplistAdapter extends BaseAdapter {
       List<Drawable> list;
       //这就是要填充的数据列表
       public ApplistAdapter(List<Drawable> image) {
           this.list=image;
       }

       @Override
       public int getCount() {
           //有多少条数据
           return list.size();
       }

       @Override
       public Object getItem(int position) {
           //返回获取当前position位置这一条
           return list.get(position);
       }

       @Override
       public long getItemId(int position) {
           //返回获取当前position位置这一条的ID
           return position;
       }

       @Override
       public View getView(final int position, View convertView, ViewGroup parent) {
           //处理view --data 填充数据的一个过程
           ViewHolder viewHolder;

           LayoutInflater layoutInflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
           if(convertView==null) {
               viewHolder = new ViewHolder();
               convertView = layoutInflater.inflate(R.layout.list_view_data_demo, null);
               viewHolder.imageView1 =(ImageView) convertView.findViewById(R.id.ImageView1);
               viewHolder.imageView2=(ImageView)convertView.findViewById(R.id.ImageView2);
               viewHolder.imageView3 =(ImageView) convertView.findViewById(R.id.ImageView3);
               viewHolder.imageView4=(ImageView)convertView.findViewById(R.id.ImageView4);
               convertView.setTag(viewHolder);//对应
           }else{
               viewHolder= (ViewHolder) convertView.getTag();
           }
           if(position==0) {
               viewHolder.imageView1.setImageDrawable(getResources().getDrawable((R.drawable.fly1)));
               viewHolder.imageView2.setImageDrawable(getResources().getDrawable((R.drawable.car)));
               viewHolder.imageView3.setImageDrawable(getResources().getDrawable((R.drawable.autombile1)));
               viewHolder.imageView4.setImageDrawable(getResources().getDrawable((R.drawable.cake)));
           }
           if(position==1) {
               viewHolder.imageView1.setImageDrawable(getResources().getDrawable((R.drawable.food)));
               viewHolder.imageView2.setImageDrawable(getResources().getDrawable((R.drawable.watch)));
               viewHolder.imageView3.setImageDrawable(getResources().getDrawable((R.drawable.cp)));
               viewHolder.imageView4.setImageDrawable(getResources().getDrawable((R.drawable.phone)));
           }
           return convertView;
       }
       public class ViewHolder{
           public ImageView imageView1;
           public ImageView imageView2;
           public ImageView imageView3;
           public ImageView imageView4;
       }
   }
   public class bitmapc{
       Bitmap bitmap;

       public android.graphics.Bitmap getBitmap() {
           return bitmap;
       }

       public void setBitmap(android.graphics.Bitmap bitmap) {
           this.bitmap = bitmap;
       }
   }

}


91行那里bitmap是空的,我顶不住!

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

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

2回答
irista23 2019-11-11 18:52:46

doInBackground方法运行完后,他会调用onPostExecute方法,并传入Result(返回值)。在onPostExecute方法中,就可以将Result(参数)更新到UI控件上。是需要先异步获取list数据,再异步一一加载显示网络图片,这里可以将doInBackground返回值设置为Bitmap,onPostExecute(Bitmap bitmap) 中将参数设置为Bitmap

irista23 2019-11-11 09:52:10

图片处理是在getView()中需要开启AsyncTask,在doInBackground()方法中连接服务器,从网上获取图片并保存到SD卡中,返回的Bitmap交给UI线程运行的onPostExecute(Bitmap)方法,再使用ImageView的setImageBitmap(Bitmap)设置图片显示。

  • 提问者 慕工程6972752 #1
    先申请了一次网络请求获取到那个JSON,JSON数据里有图片的地址,然后又要在网络申请图片,然后就现实失败了,为什么我只申请网络图片时是能显示的,为什么这种二次申请就不显示了
    2019-11-11 10:00:35
  • irista23 回复 提问者 慕工程6972752 #2
    参考下这里给你的回答http://class.imooc.com/course/qadetail/168492
    2019-11-11 10:03:48
  • 提问者 慕工程6972752 回复 irista23 #3
    我这里的代码已经改成在doInBackground()中了,然后是byte【】数组传不到给bitmap,byte数组 是有数据的,就是传不过去
    2019-11-11 13:52:16
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

0 星
2.Android 网络操作与流行框架
  • 参与学习           人
  • 提交作业       220    份
  • 解答问题       1800    个

本阶段是联网及数据处理的必备技能。课程从网络基础知识到线程间协同工作、异步下载处理;从文件存储、到轻量级数据库SQLite的使用;最后利用最流程的第三方框架助你快速开发企业级APP。

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

在线咨询

领取优惠

免费试听

领取大纲

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