iT邦幫忙

1

想請問各位android 都怎麼找運行時出現的錯誤的

  • 分享至 

  • xImage

用的是android studio,產生apk時沒有出現錯誤,但運行時錯誤就開始了
畫面A有三個按鈕分別點擊Intent到另一個activity。
但第三個(btn5)點擊進入後畫面變成空白,程式也會停止運行

btn3.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent_rd = new Intent();
                intent_rd.setClass(Studenthome.this, record.class);
                startActivity(intent_rd);
                    }
                });
        btn4.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent_rr = new Intent(); 
                intent_rr.setClass(Studenthome.this,repair.class);
                startActivity(intent_rr);
            }
        });
        btn5.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
               Intent intent_lv =new Intent();
               intent_lv.setClass(Studenthome.this,leave.class);
               startActivity(intent_lv);
            }
        });

google問題是說可能Androidmanifest.xml沒有加入語句android:theme
(查看後都有加入)
或是public void onCreate(Bundle savedInstanceState, PersistableBundleState) 多了PersistableBundle的參數(沒有多出這串參數)

畫面空白的activity程式

public class leave extends AppCompatActivity {
    public static TextView leave;
    String url_leave="";//網址因為不方便列出先刪除
    ListView LV_leave;
    String cookieStr,id_text;
    @Override

    protected void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_leave);
        

   Handler myHandler_leave = new Handler();//Handler為時間處理器
   myHandler_leave.postDelayed(runTimerStop_leave, 5000); 
        if (cookieStr != null) {
            myHandler_leave.removeCallbacks(runTimerStop_leave); 
        }
        LV_leave = (ListView) findViewById(R.id.leave_list);
    }


    private Runnable runTimerStop_leave = new Runnable() {
        @Override
        public void run() {
            select(null);
        }
    };

    //顯示資料
    

public void select(String id_leave) {
   try {
      String r_leave = DBphp_leave.DBstring_leave(id_leave, url_leave);
      JSONArray jsonArray_leave = new JSONArray(r_leave);
      List<Map<String, Object>> items = new ArrayList<Map<String, Object>>();

      for (int i_leave = 0; i_leave < jsonArray_leave.length(); i_leave++) {
         JSONObject jsonData_leave = jsonArray_leave.getJSONObject(i_leave);
         Map<String, Object> item = new HashMap<String, Object>();
         
        item.put("lv_which_day ", jsonData_leave.getString("lv_which_day "));
        item.put("lv_date",jsonData_leave.getString("lv_date"));
        item.put("lv_reason",jsonData_leave.getString("lv_reason"));
        item.put("lv_state",jsonData_leave.getString("lv_state"));
        items.add(item);
            }

SimpleAdapter SA_leave = new SimpleAdapter(this, items, R.layout.list_text, new String[]{"lv_which_day ","lv_date","lv_reason","lv_state"}, new int[]{R.id.text0, R.id.text1, R.id.text2,R.id.text3});

            LV_leave.setAdapter(SA_leave);


        } catch (Exception e) {
            Log.e("log_tag=", e.toString());//log.e為發送錯誤訊息
        }
    }

}

一個一個輪流用/**/消除運行測試
貌似加入
LV_leave = (ListView) findViewById(R.id.leave_list);的部分畫面都會變成空白,程式停止運行
但不加入的話陣列的資料沒法帶入進清單,不清楚這一小串跟程式會有什麼衝突.....

dragonH iT邦大師 2020-02-20 14:58:28
看 log 阿 難道你是直接寫完打包丟到手機裝來用嗎(⊙_⊙;)
A:Log不知道怎麼使用.....google看是說找錯誤要用Log.e(String, String)
有在程式裡加了個Log.e("log_tag=", e.toString());不知道這樣寫對不對....
實際打開logcat是這個樣子
https://upload.cc/i1/2020/02/20/pyIxF1.jpg

好像還要連結Android內建的模擬器去執行??(AVD Manger??)
但AVD沒安裝成功過模擬器
https://upload.cc/i1/2020/02/20/3maNE0.jpg
說需要HAXM安裝,去安裝HAXM又出現程式相容性
https://upload.cc/i1/2020/02/20/3G42Sq.jpg
有人推薦直接Bundle apk另外安裝手機模擬器去測式執行就好
現在是用另外安裝的Blue Stacks模擬器測式,但log一樣沒有內容
少數有幾次選項會莫名出現emulator-5554,logcat在我打開安裝在BlueStacks的程式會出現內容,打開變成空白的那個頁面下方的紅字訊息會不停冒出來直到把程式關閉才會停下來.....

求關注 iT邦新手 2020-02-20 14:55:22
我之前會跳錯是欄位名稱有誤 給你參考
或是你的網頁有寫錯 他這邊讀不到他也會錯誤 我最後是網頁用好 才找android
A:網頁的部分都有檢查過,三個按鈕分別顯示三個PHP檔的陣列資料,語法幾本都一樣,欄位名稱都有做修改,命名也確認沒有重複,手機第三個和第一二個頁面不同的只有xml的畫面Palette放的比其他兩個多很多(好幾個TextView LinearLayout TableLayout等
https://upload.cc/i1/2020/02/20/0oSD25.jpg

dragonH iT邦大師 1 級 ‧ 2020-02-20 17:53:18檢舉
log 你要用 模擬器 或者像 ant1017 大說的 接手機才看的到
A:
模擬器用非內建的BlueStacks也行嗎??
內建的AVD Manger的模擬器都沒法下載
實體手機的話,手機用USB線連接電腦後,按照教學打開了手機的開發者模式的USB偵錯了
https://upload.cc/i1/2020/02/20/5tqgp3.png
但到Android studio這裡......
https://upload.cc/i1/2020/02/20/vqYDnC.jpg
不知道為什麼選項沒有出現.....

dragonH iT邦大師 1 級 ‧ 2020-02-20 17:57:40檢舉

手機試試看,模擬器用非內建的BlueStacks也行嗎??

可以啊 但是要開一些設定

至少讓 adb 抓的到

接手機應該相對簡單
A:電腦目前失敗,我先安裝adb試試看連接模擬器

連上手機模擬器執行出現畫面空白的頁面後......logcat的顯示
https://upload.cc/i1/2020/02/21/LAqbwn.jpg
訊息不斷冒出,貌似還是重複的,只到我關閉apk訊息才停止輸出
擷取其中一段
基本就是這段訊息不斷重複
https://upload.cc/i1/2020/02/21/U8shHQ.jpg

Caused by: java.lang.ClassCastException: androidx.recyclerview.widget.RecyclerView cannot be cast to android.widget.ListView
        at com.skypan.school.leave.onCreate(leave.java:59)
        at android.app.Activity.performCreate(Activity.java:6787)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1146)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2619)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2727) 
        at android.app.ActivityThread.-wrap12(ActivityThread.java) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1478) 
        at android.os.Handler.dispatchMessage(Handler.java:102) 
        at android.os.Looper.loop(Looper.java:154) 
        at android.app.ActivityThread.main(ActivityThread.java:6125) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:893) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:783) 
2020-02-21 17:12:14.235 1805-1805/? E/AndroidRuntime: in writeCrashedAppName, pkgName :com.skypan.school
2020-02-21 17:12:14.237 1805-1805/? E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.skypan.school, PID: 1805
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.skypan.school/com.skypan.school.leave}: java.lang.ClassCastException: androidx.recyclerview.widget.RecyclerView cannot be cast to android.widget.ListView
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2666)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2727)
        at android.app.ActivityThread.-wrap12(ActivityThread.java)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1478)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:154)
        at android.app.ActivityThread.main(ActivityThread.java:6125)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:893)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:783)

很多沒看懂,先點擊(leave.java:59)的藍色字樣,去看leave.java的59行
https://upload.cc/i1/2020/02/21/VZGt6c.jpg
https://upload.cc/i1/2020/02/21/aC1dAM.jpg
之前一個個挑出來的
LV_leave = (ListView) findViewById(R.id.leave_list);
看不太明白這段訊息,在想是不是xml有不行的地方.....

其餘(Activity.java:6787) (Handler.java:102)(Looper.java:154)
或是(Instrumentation.java:1146)等不是我創建的檔案,貌似是內建的

看更多先前的討論...收起先前的討論...
我之前會跳錯是欄位名稱有誤 給你參考
或是你的網頁有寫錯 他這邊讀不到他也會錯誤 我最後是網頁用好 才找android
dragonH iT邦超人 5 級 ‧ 2020-02-20 14:58:28 檢舉
看 log 阿 難道你是直接寫完打包丟到手機裝來用嗎(⊙_⊙;)
ant1017 iT邦新手 2 級 ‧ 2020-02-20 16:52:15 檢舉
怎麼不直接,接著手機debug?
dragonH iT邦超人 5 級 ‧ 2020-02-20 17:53:18 檢舉
log 你要用 模擬器 或者像 ant1017 大說的 接手機才看的到

就算是欄位錯誤也不應該直接 crash

最好去 handle 一下 error
dragonH iT邦超人 5 級 ‧ 2020-02-20 17:57:40 檢舉
>手機試試看,模擬器用非內建的BlueStacks也行嗎??

可以啊 但是要開一些設定

至少讓 adb 抓的到

接手機應該相對簡單
ytyjt0976 iT邦新手 5 級 ‧ 2021-05-12 21:22:09 檢舉
哥,我不知道你解決了沒,我提供我的看法,通常是看這段:
Caused by: java.lang.ClassCastException: androidx.recyclerview.widget.RecyclerView cannot be cast to android.widget.ListView

你是不是把RecyclerView 的id給listview,所以才crash
ytyjt0976 iT邦新手 5 級 ‧ 2021-05-12 21:25:57 檢舉
然後我自己是喜歡RecyclerView,然後adapter自己實作一個類別去繼承RecyclerView.Adapter,因為裡面的畫面你可以自訂,然後我是偏好用volley取資料.
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友回答

立即登入回答