2014-09-04 106 views
1

首先,我很抱歉我的英文不好。我想讀取txt文件並進入2d數組。這段代碼在java上成功運行。但android模擬器給出警告消息:「對不起!應用程序意外停止。請再試一次」將txt文件讀入二維數組強制退出

我該如何解決?感謝

這裏是我的代碼:

package com.example.hocam; 
import java.io.File; 
import java.io.FileNotFoundException; 
import java.util.ArrayList; 
import java.util.List; 
import java.util.Scanner; 
import android.support.v7.app.ActionBarActivity; 
import android.os.Bundle; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.widget.ArrayAdapter; 
import android.widget.ListView; 

public class Konular extends ActionBarActivity { 

    private ListView konuListe; 
    private List<KonuBilgileri> konuBilgileri; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_konular); 
    Bundle dersadi = getIntent().getExtras(); 
    String dersinadi= dersadi.getString("Ders"); 

    switch(dersinadi) { 
    case "Turkce": 
     KonuGetir turkce=new KonuGetir("turkce.txt"); 

     String[][] turkcekonular=turkce.getKonular(); 

     System.out.println(turkcekonular[0][0]); // it is the problem and give error 
     konuListe = (ListView) findViewById(R.id.konu_listesi); 
     konuBilgileri = new ArrayList<KonuBilgileri>(); 
     konuBilgileri.add(new KonuBilgileri(turkcekonular[0][0],R.drawable.turkce, turkcekonular[0][1])); // array is problem 

     MyAdapter adapter = new MyAdapter(Konular.this, R.layout.custom_list_item, konuBilgileri); 
     konuListe.setAdapter(adapter); 

     break; 

    } 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.konular, menu); 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    // Handle action bar item clicks here. The action bar will 
    // automatically handle clicks on the Home/Up button, so long 
    // as you specify a parent activity in AndroidManifest.xml. 
    int id = item.getItemId(); 
    if (id == R.id.action_settings) { 
     return true; 
    } 
    return super.onOptionsItemSelected(item); 
} 

} 

import java.io.File; 
import java.io.FileNotFoundException; 
import java.util.Scanner; 

public class KonuGetir { 
final int maxLines = 10100; 
String[][] resultArray = new String[maxLines][]; 

public KonuGetir(String Ders){ 
     File file = new File(Ders); 
     Scanner scanner; 
     try { 
      scanner = new Scanner(file,"utf-8"); 
      int linesCounter = 0; 
       while (scanner.hasNextLine() && linesCounter < maxLines) { 
        resultArray[linesCounter] = scanner.nextLine().split("@"); 
        linesCounter++; 
       } 
     } catch (FileNotFoundException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

} 
public String[][] getKonular() { 
    return resultArray; 
} 
} 

日誌文件:

> 09-04 16:18:22.262: E/AndroidRuntime(1164): FATAL EXCEPTION: main 
09-04 16:18:22.262: E/AndroidRuntime(1164): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.hocam/com.example.hocam.Konular}: java.lang.NullPointerException 
09-04 16:18:22.262: E/AndroidRuntime(1164):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663) 
09-04 16:18:22.262: E/AndroidRuntime(1164):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679) 
09-04 16:18:22.262: E/AndroidRuntime(1164):  at android.app.ActivityThread.access$2300(ActivityThread.java:125) 
09-04 16:18:22.262: E/AndroidRuntime(1164):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033) 
09-04 16:18:22.262: E/AndroidRuntime(1164):  at android.os.Handler.dispatchMessage(Handler.java:99) 
09-04 16:18:22.262: E/AndroidRuntime(1164):  at android.os.Looper.loop(Looper.java:123) 
09-04 16:18:22.262: E/AndroidRuntime(1164):  at android.app.ActivityThread.main(ActivityThread.java:4627) 
09-04 16:18:22.262: E/AndroidRuntime(1164):  at java.lang.reflect.Method.invokeNative(Native Method) 
09-04 16:18:22.262: E/AndroidRuntime(1164):  at java.lang.reflect.Method.invoke(Method.java:521) 
09-04 16:18:22.262: E/AndroidRuntime(1164):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 
09-04 16:18:22.262: E/AndroidRuntime(1164):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 
09-04 16:18:22.262: E/AndroidRuntime(1164):  at dalvik.system.NativeStart.main(Native Method) 
09-04 16:18:22.262: E/AndroidRuntime(1164): Caused by: java.lang.NullPointerException 
09-04 16:18:22.262: E/AndroidRuntime(1164):  at com.example.hocam.Konular.onCreate(Konular.java:66) 
09-04 16:18:22.262: E/AndroidRuntime(1164):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
09-04 16:18:22.262: E/AndroidRuntime(1164):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627) 
09-04 16:18:22.262: E/AndroidRuntime(1164):  ... 11 more 
09-04 16:42:10.422: E/AndroidRuntime(1178): FATAL EXCEPTION: main 
09-04 16:42:10.422: E/AndroidRuntime(1178): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.hocam/com.example.hocam.Konular}: java.lang.NullPointerException 
09-04 16:42:10.422: E/AndroidRuntime(1178):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663) 
09-04 16:42:10.422: E/AndroidRuntime(1178):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679) 
09-04 16:42:10.422: E/AndroidRuntime(1178):  at android.app.ActivityThread.access$2300(ActivityThread.java:125) 
09-04 16:42:10.422: E/AndroidRuntime(1178):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033) 
09-04 16:42:10.422: E/AndroidRuntime(1178):  at android.os.Handler.dispatchMessage(Handler.java:99) 
09-04 16:42:10.422: E/AndroidRuntime(1178):  at android.os.Looper.loop(Looper.java:123) 
09-04 16:42:10.422: E/AndroidRuntime(1178):  at android.app.ActivityThread.main(ActivityThread.java:4627) 
09-04 16:42:10.422: E/AndroidRuntime(1178):  at java.lang.reflect.Method.invokeNative(Native Method) 
09-04 16:42:10.422: E/AndroidRuntime(1178):  at java.lang.reflect.Method.invoke(Method.java:521) 
09-04 16:42:10.422: E/AndroidRuntime(1178):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 
09-04 16:42:10.422: E/AndroidRuntime(1178):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 
09-04 16:42:10.422: E/AndroidRuntime(1178):  at dalvik.system.NativeStart.main(Native Method) 
09-04 16:42:10.422: E/AndroidRuntime(1178): Caused by: java.lang.NullPointerException 
09-04 16:42:10.422: E/AndroidRuntime(1178):  at com.example.hocam.Konular.onCreate(Konular.java:66) 
09-04 16:42:10.422: E/AndroidRuntime(1178):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
09-04 16:42:10.422: E/AndroidRuntime(1178):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627) 
09-04 16:42:10.422: E/AndroidRuntime(1178):  ... 11 more 
09-04 16:43:28.802: E/AndroidRuntime(1207): FATAL EXCEPTION: main 
09-04 16:43:28.802: E/AndroidRuntime(1207): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.hocam/com.example.hocam.Konular}: java.lang.NullPointerException 
09-04 16:43:28.802: E/AndroidRuntime(1207):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663) 
09-04 16:43:28.802: E/AndroidRuntime(1207):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679) 
09-04 16:43:28.802: E/AndroidRuntime(1207):  at android.app.ActivityThread.access$2300(ActivityThread.java:125) 
09-04 16:43:28.802: E/AndroidRuntime(1207):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033) 
09-04 16:43:28.802: E/AndroidRuntime(1207):  at android.os.Handler.dispatchMessage(Handler.java:99) 
09-04 16:43:28.802: E/AndroidRuntime(1207):  at android.os.Looper.loop(Looper.java:123) 
09-04 16:43:28.802: E/AndroidRuntime(1207):  at android.app.ActivityThread.main(ActivityThread.java:4627) 
09-04 16:43:28.802: E/AndroidRuntime(1207):  at java.lang.reflect.Method.invokeNative(Native Method) 
09-04 16:43:28.802: E/AndroidRuntime(1207):  at java.lang.reflect.Method.invoke(Method.java:521) 
09-04 16:43:28.802: E/AndroidRuntime(1207):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 
09-04 16:43:28.802: E/AndroidRuntime(1207):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 
09-04 16:43:28.802: E/AndroidRuntime(1207):  at dalvik.system.NativeStart.main(Native Method) 
09-04 16:43:28.802: E/AndroidRuntime(1207): Caused by: java.lang.NullPointerException 
09-04 16:43:28.802: E/AndroidRuntime(1207):  at com.example.hocam.Konular.onCreate(Konular.java:66) 
09-04 16:43:28.802: E/AndroidRuntime(1207):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
09-04 16:43:28.802: E/AndroidRuntime(1207):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627) 
09-04 16:43:28.802: E/AndroidRuntime(1207):  ... 11 more 

Android清單文件:

<uses-permission android:name="android.permission.INTERNET" /> 

<uses-sdk 
    android:minSdkVersion="8" 
    android:targetSdkVersion="21" /> 

<application 
    android:allowBackup="true" 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" 
    android:theme="@style/AppTheme" > 
    <activity 
     android:name=".MainActivity" 
     android:label="@string/app_name" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
    <activity 
     android:name=".YGS" 
     android:label="@string/title_activity_ygs" > 
    </activity> 
    <activity 
     android:name=".Konular" 
     android:label="@string/title_activity_konular" > 
    </activity> 
    <activity 
     android:name=".Video" 
     android:screenOrientation="landscape" 
     android:label="@string/title_activity_video" > 

    </activity> 
</application> 

+0

那麼,是什麼堆棧跟蹤日誌樣子? (我個人不會說一個對話框,指出你的應用程序崩潰了「警告」,但不介意......) – 2014-09-04 16:24:09

+0

也發佈你的Manifest.xml文件。 – 2014-09-04 18:24:16

+0

我發佈了manifest.xml文件@DavidCAdams – 2014-09-04 21:17:07

回答

0

您正在使用下面的代碼:

String[][] turkcekonular=turkce.getKonular(); 

    System.out.println(turkcekonular[0][0]); 

但得到java.lang.NullPointerException

之所以這樣,是因爲getKonular()返回的數組初始化爲大小10100,但scanner不包含任何行,因此scanner.hasNextLine()爲false。

這意味着turkcekonular[0]爲空,因爲它從未設置過。 這意味着turkcekonular[0][0]試圖訪問一個空的對象,所以拋出一個NullPointerException

你應該檢查的對象是試圖訪問之前空..

if(turkcekonular[0] != null) 
     System.out.println(turkcekonular[0][0]); 

和其他地方,這個問題發生。

(你應該弄清楚爲什麼你的文件不被讀取。難道是正確命名,存在於指定的路徑?)

+0

首先感謝您的回答。我改變了我的代碼,如果(turkcekonular [0]!= null) System.out.println(turkcekonular [0] [0]);沒有任何強制退出。我認爲問題是KonuGetir類。順便說一下,我修正了正確命名。我可以修改我的閱讀txt文件方法嗎?再次感謝@Doomsknight – 2014-09-05 01:22:33

+0

順便把我的文本文件放到工程文件(Hocam)目錄下 – 2014-09-05 02:21:10

+0

@KaaNSARIKAYA使用'if(!file.exists())System.out.println(「FILE DOES NOT EXIST」);'看看是否該文件甚至存在/可以找到。除此之外,你的代碼看起來沒問題。您可以嘗試使用緩衝式閱讀器讀取線條。 http://examples.javacodegeeks.com/core-java/io/bufferedreader/read-file-with-bufferedreader-example/如果這不起作用,你應該問另一個問題,爲什麼你的讀者不工作。由於這個答案確實解決了你問到的崩潰問題。並接受這個答案:)謝謝 – Doomsknight 2014-09-05 07:41:24