android小程式之幸運菜譜

来源:https://www.cnblogs.com/xtuxiongda/archive/2018/03/10/8537434.html
-Advertisement-
Play Games

android小程式之幸運菜譜 前言:剛剛結束短短5天的android公開課程,收穫不少,寫下來記錄一下吧!(因為學校校企公開課的緣故才偶然接觸的android,所以只學了這幾天,不喜勿噴) 一開始得知這公開課最後得做個項目,還是挺懵逼的,不知道整啥。後來看了看聚合數據有啥免費的api,想了想寒假家 ...


android小程式之幸運菜譜

前言:剛剛結束短短5天的android公開課程,收穫不少,寫下來記錄一下吧!(因為學校校企公開課的緣故才偶然接觸的android,所以只學了這幾天,不喜勿噴)

一開始得知這公開課最後得做個項目,還是挺懵逼的,不知道整啥。後來看了看聚合數據有啥免費的api,想了想寒假家裡人老是問我今天吃啥,最後就有了做這個幸運菜譜的想法。

這app長啥樣,下麵這樣:

 

第一張是主界面,輸入你喜歡的一個數字(1-80000),然後就會在第二個界面返回對應的菜譜,你沒看錯(8萬道菜,我一開始用這api的時候都驚呆了!)

接下來放上介面的代碼和處理相應界面的java代碼:

  1 public class Juhedemo {   //調用介面的代碼
  2     public static final String DEF_CHATSET = "UTF-8";
  3     public static final int DEF_CONN_TIMEOUT = 30000;
  4     public static final int DEF_READ_TIMEOUT = 30000;
  5     public static String userAgent =  "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.66 Safari/537.36";
  6 
  7     //配置您申請的KEY
  8     public static final String APPKEY ="這就不能告訴你了,自己申請賬號吧";
  9 
 10     //4.按菜譜ID查看詳細
 11     public  menubean getRequest4(String num){
 12         menubean mu=new menubean();
 13         String result =null;
 14         String title,ingredient,burden;
 15         ArrayList<String> b = new ArrayList<>();
 16         String url ="http://apis.juhe.cn/cook/queryid";//請求介面地址
 17         Map params = new HashMap();//請求參數
 18         params.put("id",num);//菜譜的ID
 19         params.put("key",APPKEY);//應用APPKEY(應用詳細頁查詢)
 20         params.put("dtype","json");//返回數據的格式,xml或json,預設json
 21         Log.e("MyLog","====num===="+num);
 22         try {
 23             result =net(url, params, "GET");
 24             Log.e("MyLog","====result===="+result);
 25             org.json.JSONObject object = new org.json.JSONObject(result);
 26             if(object.getInt("error_code")==0){
 27                 org.json.JSONObject resultObject = object.getJSONObject("result");
 28                 org.json.JSONArray array = resultObject.getJSONArray("data");
 29                 mu.setTitle(array.getJSONObject(0).getString("title"));
 30                 mu.setIngredient(array.getJSONObject(0).getString("ingredients"));
 31                 mu.setBurden(array.getJSONObject(0).getString("burden"));
 32                 org.json.JSONObject o1=array.getJSONObject(0);
 33                 org.json.JSONArray a1=o1.getJSONArray("steps");
 34                 for(int i=0;i<a1.length();i++){
 35                    String step  =a1.getJSONObject(i).getString("step");
 36                    b.add(step);
 37                 }
 38                 mu.setB(b);
 39             }
 40 //            JSONObject object = JSONObject.fromObject(result);
 41 //            Log.e("MyLog","=====object==="+object);
 42 //            JSONObject ob=object.getJSONObject("result");
 43 //            JSONArray ob1=ob.getJSONArray("data");
 44 //            JSONObject o2=ob1.getJSONObject(0);
 45 //            JSONArray po=o2.getJSONArray("steps");
 46 //
 47 //            if(object.getInt("error_code")==0){
 48 //                    title=o2.getString("title");
 49 //                    ingredient=o2.getString("ingredients");
 50 //                    burden=o2.getString("burden");
 51 //                    for(int i=0;i<po.size();i++){
 52 //
 53 //                        JSONObject u=po.getJSONObject(i);
 54 //
 55 //                        b[i]=(u.getString("step"));
 56 //
 57 //                    }
 58 //                mu.setTitle(title);
 59 //                mu.setIngredient(ingredient);
 60 //                mu.setBurden(burden);
 61 //                mu.setB(b);
 62 //
 63 //            }else{
 64 //                System.out.println(object.get("error_code")+":"+object.get("reason"));
 65 //
 66 //            }
 67 
 68         } catch (Exception e) {
 69             e.printStackTrace();
 70             Log.e("MyLog","====+error_code===="+e.getMessage());
 71         }
 72         return mu;
 73     }
 74 
 75     /**
 76      *
 77      * @param strUrl 請求地址
 78      * @param params 請求參數
 79      * @param method 請求方法
 80      * @return  網路請求字元串
 81      * @throws Exception
 82      */
 83     public static String net(String strUrl, Map params,String method) throws Exception {
 84         HttpURLConnection conn = null;
 85         BufferedReader reader = null;
 86         String rs = null;
 87         try {
 88             StringBuffer sb = new StringBuffer();
 89             if(method==null || method.equals("GET")){
 90                 strUrl = strUrl+"?"+urlencode(params);
 91             }
 92             Log.e("MyLog","----url------"+strUrl);
 93             URL url = new URL(strUrl);
 94             conn = (HttpURLConnection) url.openConnection();
 95             if(method==null || method.equals("GET")){
 96                 conn.setRequestMethod("GET");
 97             }else{
 98                 conn.setRequestMethod("POST");
 99                 conn.setDoOutput(true);
100             }
101             conn.setRequestProperty("User-agent", userAgent);
102             conn.setUseCaches(false);
103             conn.setConnectTimeout(DEF_CONN_TIMEOUT);
104             conn.setReadTimeout(DEF_READ_TIMEOUT);
105             conn.setInstanceFollowRedirects(false);
106             conn.connect();
107             if (params!= null && method.equals("POST")) {
108                 try {
109                     DataOutputStream out = new DataOutputStream(conn.getOutputStream());
110                     out.writeBytes(urlencode(params));
111                 } catch (Exception e) {
112                     Log.e("MyLog","---- e------"+ e.getMessage());
113                 }
114             }
115             InputStream is = conn.getInputStream();
116             rs = read(is);
117 //            reader = new BufferedReader(new InputStreamReader(is));
118 //            String strRead = null;
119 //            while ((strRead = reader.readLine()) != null) {
120 //                sb.append(strRead);
121 //            }
122 //            rs = sb.toString();
123             Log.e("MyLog","----rs------"+rs);
124         } catch (IOException e) {
125             Log.e("MyLog","----e------"+e.getMessage());
126             e.printStackTrace();
127         } finally {
128             if (reader != null) {
129                 reader.close();
130             }
131             if (conn != null) {
132                 conn.disconnect();
133             }
134         }
135         return rs;
136     }
137 
138     private static String read(InputStream is) throws IOException {
139         StringBuilder builder = new StringBuilder();
140         int byteCount = 0;
141         byte[] bytes = new byte[1024];
142         while ((byteCount = is.read(bytes)) != -1) {
143             String text = new String(bytes,0,byteCount);
144             Log.e("MyLog","----=======------"+ text);
145             builder.append(text);
146         }
147         Log.e("MyLog","----???????????------"+ builder.toString());
148         return builder.toString();
149     }
150 
151     //將map型轉為請求參數型
152     public static String urlencode(Map<String,Object>data) {
153         StringBuilder sb = new StringBuilder();
154         for (Map.Entry i : data.entrySet()) {
155             try {
156                 sb.append(i.getKey()).append("=").append(URLEncoder.encode(i.getValue()+"","UTF-8")).append("&");
157             } catch (UnsupportedEncodingException e) {
158                 e.printStackTrace();
159             }
160         }
161         return sb.toString();
162     }
163 }

這一部分當初遇到的問題是:我最初是用eclipse上調用介面測試的,一點問題都沒有。後來把那部分代碼放回到AS中就出問題了,總是數據獲取不全,後來把json解析文件改了,就好了(上面註釋部分就是之前的JSon解析代碼)

 1 public class MainActivity extends AppCompatActivity {   //主界面
 2 private EditText med;
 3 private Button mb;
 4     private List<Food> foodlist = new ArrayList<>();
 5 
 6     @Override
 7     protected void onCreate(Bundle savedInstanceState) {
 8         super.onCreate(savedInstanceState);
 9         setContentView(R.layout.activity_main);
10         initFoods();
11         FoodAdapter adapter = new FoodAdapter(MainActivity.this,R.layout.food,foodlist);
12         med=findViewById(R.id.edit_text);
13         mb=findViewById(R.id.button);
14         mb.setOnClickListener(new View.OnClickListener() {
15             @Override
16             public void onClick(View view) {
17                 String num=med.getText().toString();
18                 Intent in=new Intent(MainActivity.this,DetailActivity.class);
19                 in.putExtra("med",num);
20                 startActivity(in);
21             }
22         });
23         EditText editText = (EditText) findViewById(R.id.edit_text);
24 
25         ListView listView = (ListView) findViewById(R.id.list_view);
26         listView.setAdapter(adapter);
27     }
28     private  void initFoods(){
29         Food a = new Food(R.drawable.food1);
30         foodlist.add(a);
31         Food b= new Food(R.drawable.food2);
32         foodlist.add(b);
33         Food c= new Food(R.drawable.food3);
34         foodlist.add(c);
35 
36     }
37 }

public class DetailActivity extends AppCompatActivity {  //顯示界面
    private TextView tv,tv2,tv3,tv4;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_detail);
        tv=findViewById(R.id.tvTitle);
        tv2=findViewById(R.id.tvIngredients);
        tv3=findViewById(R.id.tvBunder);
        tv4=findViewById(R.id.tvSteps);
        Intent f= getIntent();
        String ji=f.getStringExtra("med");
        new NetworkTask().execute(ji);


    }

    private class NetworkTask extends AsyncTask<String,Void,menubean>{
        @Override
        protected menubean doInBackground(String... ji) {

            Juhedemo nu2=new Juhedemo();
            menubean kk=nu2.getRequest4(ji[0]);
            Log.e("MyLog","========"+kk);
//            String title2=kk.getTitle();
            return kk;
        }

        @Override
        protected void onPostExecute(menubean kk) {
            ArrayList<String> ad=new ArrayList<String>();
            String dg="";
            ad=kk.getB();
            for(int i=0;i<ad.size();i++){
                dg=dg+ad.get(i);
            }

            super.onPostExecute(kk);
            tv.setText(kk.getTitle());
            tv2.setText(kk.getIngredient());
            tv3.setText(kk.getBurden());
            tv4.setText(dg);
        }
    }
}

這就告一段落,接下來繼續努力吧!(想知道自己幸運數字對應的是什麼菜就給我留言,留下一個數字,我給你一道菜


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 視頻剪切我意外的發現上一次的視頻壓縮的代碼能夠運行FFmpeg視頻剪切的命令,但是不能做視頻合併的命令,因為不能讀取記錄了幾個視頻的路徑的txt文件。 這裡我就說直說視頻剪切的過程,不說代碼,只說log,畢竟我也不清楚代碼往哪運行了 上一次的項目地址https://github.com/979451 ...
  • 方法一 登錄GitHub後,點擊下麵的圖 New responsitory 按鈕 或者點擊綠色按鈕 New repository,新建一個新建一個遠程倉庫(remote repository),點擊後會進入如下頁面: Repository name 庫名( 最好用英文) Description 描述 ...
  • 在Unity游戲中植入廣告是Unity 游戲產品增加收入的一種重要方式,常用的廣告有谷歌Admob,百度ssp,騰訊廣點通,unity公司的unityads等等,而使用的最多的應該屬於谷歌Admob,所以我們這裡以Google admob介紹下 在unity3d中展示廣告我選擇使用谷歌,聽說回報率比 ...
  • 簡要:本系列文章講會對expo進行全面的介紹,本人從2017年6月份接觸expo以來,對expo的研究斷斷續續,一路走來將近10個月,廢話不多說,接下來你看到內容,講全部來與官網 我猜去全部機翻+個人修改補充+demo測試的形式,對expo進行一次大補血!歡迎加入expo興趣學習交流群:597732 ...
  • 項目源碼https://github.com/979451341/FFmpegCompress 這個視頻壓縮是通過類似在mac終端上輸入FFmpeg命令來完成,意思是我們需要在Android上達到能夠執行FFmpeg命令。其實做到這一點還比較容易,這一次重在說說這壓縮過程,不是看代碼運行過程,通過l ...
  • 簡要:本系列文章講會對expo進行全面的介紹,本人從2017年6月份接觸expo以來,對expo的研究斷斷續續,一路走來將近10個月,廢話不多說,接下來你看到內容,講全部來與官網 我猜去全部機翻+個人修改補充+demo測試的形式,對expo進行一次大補血!歡迎加入expo興趣學習交流群:597732 ...
  • 簡要:本系列文章講會對expo進行全面的介紹,本人從2017年6月份接觸expo以來,對expo的研究斷斷續續,一路走來將近10個月,廢話不多說,接下來你看到內容,講全部來與官網 我猜去全部機翻+個人修改補充+demo測試的形式,對expo進行一次大補血!歡迎加入expo興趣學習交流群:597732 ...
  • 簡要:本系列文章講會對expo進行全面的介紹,本人從2017年6月份接觸expo以來,對expo的研究斷斷續續,一路走來將近10個月,廢話不多說,接下來你看到內容,講全部來與官網 我猜去全部機翻+個人修改補充+demo測試的形式,對expo進行一次大補血!歡迎加入expo興趣學習交流群:597732 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...