2014-09-04 63 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