麻烦老师看下为什么没法显示ListView
Activity中:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 | package com.example.felix.homeworkapp; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.AsyncTask; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v7.app.AppCompatActivity; import android.view.LayoutInflater; import android.widget.ListView; import android.widget.Toast; import com.example.felix.homeworkapp.Adapter.GridAdapter1; import com.example.felix.homeworkapp.Adapter.MenuAdapter1; import com.example.felix.homeworkapp.Info.MenuInfo; import com.example.felix.homeworkapp.Info.MenuResult; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import java.io.IOException; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; import java.util.ArrayList; import java.util.List; public class MenuActivity extends AppCompatActivity { private ListView menuListView; @Override protected void onCreate( @Nullable Bundle savedInstanceState) { super .onCreate(savedInstanceState); setContentView(R.layout.fragment_main); menuListView = findViewById(R.id.mainFragment_listView); //LayoutInflater layoutInflater= (LayoutInflater) getSystemService(getApplicationContext().LAYOUT_INFLATER_SERVICE); } public class MenuAsyncTask extends AsyncTask<Void,Integer, String>{ @Override protected void onPreExecute() { Toast.makeText(MenuActivity. this , "开始准备获取数据" ,Toast.LENGTH_LONG).show(); super .onPreExecute(); } @Override protected String doInBackground(Void... voids) { return request( "http://www.imooc.com/api/shopping?type=11" ); } private String request(String s) { try { URL url= new URL(s); HttpURLConnection connection= (HttpURLConnection) url.openConnection(); connection.setConnectTimeout( 30 * 1000 ); connection.setRequestMethod( "GET" ); connection.connect(); int reponseCode=connection.getResponseCode(); String reponseMessage=connection.getResponseMessage(); if (reponseCode==HttpURLConnection.HTTP_OK){ InputStream inputStream=connection.getInputStream(); Bitmap bitmap= BitmapFactory.decodeStream(inputStream); } else { Toast.makeText(MenuActivity. this , "ERROR" ,Toast.LENGTH_LONG).show(); } } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return null ; } @Override protected void onProgressUpdate(Integer... values) { super .onProgressUpdate(values); } @Override protected void onPostExecute(String s) { MenuResult menuResult= new MenuResult(); try { JSONObject jsonObject= new JSONObject(); JSONArray dataArray=jsonObject.getJSONArray( "data" ); int status=jsonObject.getInt( "status" ); menuResult.setmStatus(status); List<MenuInfo> menuInfoList= new ArrayList<>(); for ( int i= 0 ;i<dataArray.length();i++){ MenuInfo menuInfo= new MenuInfo(); JSONObject js= (JSONObject) dataArray.get(i); menuInfo.setId(js.getInt( "id" )); menuInfo.setName(js.getInt( "name" )); menuInfo.setImg(js.getString( "img" )); menuInfo.setAction(js.getInt( "action" )); menuInfo.setCount(js.getInt( "count" )); menuInfo.setPrice(js.getInt( "price" )); menuInfoList.add(menuInfo); } menuResult.setmDataInfoList(menuInfoList); } catch (JSONException e) { e.printStackTrace(); } MenuAdapter1 menuAdapter1= new MenuAdapter1(menuResult.getmDataInfoList(),MenuActivity. this ); menuListView.setAdapter(menuAdapter1); super .onPostExecute(s); } } } |
Adapter中:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 | package com.example.felix.homeworkapp.Adapter; import android.content.Context; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.TextView; import com.example.felix.homeworkapp.Info.MenuInfo; import com.example.felix.homeworkapp.R; import java.util.ArrayList; import java.util.List; public class MenuAdapter1 extends BaseAdapter { List<MenuInfo> menuInfoList= new ArrayList<>(); private Context context; public MenuAdapter1(List<MenuInfo> menuInfoList, Context context) { this .menuInfoList = menuInfoList; this .context = context; } @Override public int getCount() { return menuInfoList.size(); } @Override public Object getItem( int i) { return menuInfoList.get(i); } @Override public long getItemId( int i) { return i; } @Override public View getView( int i, View view, ViewGroup viewGroup) { ViewHolder viewHolder= new ViewHolder(); if (view== null ){ view=View.inflate(context, R.layout.item_fragment_main, null ); viewHolder.img_dish=view.findViewById(R.id.item_fragment_main_imageView); viewHolder.tv_dish_name=view.findViewById(R.id.item_fragment_main_textView); view.setTag(viewHolder); } else { view= (View) view.getTag(); } MenuInfo menuInfo=menuInfoList.get(i); //viewHolder.img_dish.setImageBitmap(menuInfo.getImg()); viewHolder.tv_dish_name.setText(menuInfo.getName()); return view; } public class ViewHolder { ImageView img_dish; TextView tv_dish_name; //TextView tv_dish_name; } } |
以及顺便请老师看下
1 | viewHolder.img_dish.setImageBitmap(menuInfo.getImg()); |
get方法中是String这里应该怎么进行格式转换,谢谢老师
0
收起
正在回答
3回答
数据获取有如下问题:
MenuAsyncTask类中,doInBackground()方法返回的值将被当做onPostExecute()方法的参数传递进去,你的代码中doInBackground()方法返回的request()方法的返回值,而request没有正确返回请求的数据。
1)如果获取的数据,你参考如下使用循环读取服务器数据并返回
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | String str = null ; InputStream in = null ; try { URL url = new URL(path); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setRequestMethod( "GET" ); conn.setConnectTimeout( 3 * 1000 ); conn.connect(); if (conn.getResponseCode()==HttpURLConnection.HTTP_OK){ in = conn.getInputStream(); int len = - 1 ; byte []by = new byte [ 4 * 1024 ]; StringBuffer buffer = new StringBuffer(); while ((len=in.read(by))!=- 1 ){ buffer.append( new String(by, 0 ,len)); } str = new String(buffer); } } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { try { if (in!= null ){ in.close(); } } catch (IOException e) { e.printStackTrace(); } } return str; |
Android网络操作与数据存储2018版
- 参与学习 人
- 提交作业 307 份
- 解答问题 1613 个
本专题是联网及数据处理的必备技能。课程从网络基础知识到线程间协同工作、异步下载处理。介绍了Android内外部文件存储、轻量级数据库SQLite的使用。利用屏幕适配、状态保持、百度地图解决实际问题。
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧