2016-04-09 27 views
-1

///////////////////////////////// ////////////////////////////////////////////////// ////////////////////////////////////////////////// ////////////////////////////Öğelerden metin dosyasını okuyamıyorum (Android Studio, JAVA)

Bu yüzden cevap Henry'nin söylediği şeydir. Bir etkinlik olmayan sınıftan varlıklara erişmek imkansız. AssetManager nesnesini ana etkinlikten parametre olarak geçirdikten sonra, etkin olmayan bir sınıf yönteminin varlığı okuyabildiği çalışır. Benim durumumda :

AssetManager am = getAssets(); 
tc.ReadFile2(am); 

////////////////////////////////////// ////////////////////////////////////////////////// ////////////////////////////////////////////////// ///////////////////////

Öğeler dizini .txt değerini okumada sorun yaşıyorum. Neredeyse her şeyi denedim ama sonuç hep aynıdır: directory tree

Ben de varlıklarını listelemeye çalıştık, ancak sonuç yukarıdaki aynıdır:

I/System.out: java.lang.NullPointerException 

Bu projenin dizin ağacını böyle görünüyor. İşte benim sınıfının geçerli kod:

import java.io.*; 
import java.lang.*; 

import android.content.res.AssetManager; 
import android.support.v7.app.AppCompatActivity; 

public class TextChange extends AppCompatActivity { 
public TextChange(){} 

protected String ReadFile() throws IOException{ 
    BufferedReader reader = null; 
    reader = new BufferedReader(new InputStreamReader(context.getAssets().open("sampleText.txt"))); 
    String text = ""; 
    while (reader.readLine() != null){ 
     text = reader.readLine(); 
    } 
    System.out.println(text); 
    return text; 
} 

protected String ReadFile2() throws IOException{ 
    StringBuilder buf = new StringBuilder(); 
    InputStream input = getAssets().open("sampleText2.txt"); 
    BufferedReader in = new BufferedReader(new InputStreamReader(input, "UTF-8")); 
    String str; 

    while ((str=in.readLine()) != null) { 
     buf.append(str); 
    } 

    in.close(); 

    return buf.toString(); 
} 

public String[] ListAssets() throws IOException{ 
    AssetManager am = getAssets(); 
    String[] files = am.list(""); 
    for (String s : files) { 
     System.out.println(s); 
    } 
    return files; 
} 
} 

kimse yanlış ve nasıl bu sorunu gidermek için bana söyleyebilir? Herhangi bir yardım gelebilir!

printStackTrace:

W/System.err: java.lang.NullPointerException 
W/System.err:  at android.content.ContextWrapper.getAssets(ContextWrapper.java:83) 
W/System.err:  at jb.jbench.TextChange.ReadFile2(TextChange.java:28) 
W/System.err:  at jb.jbench.MainActivity$3.onClick(MainActivity.java:43) 
W/System.err:  at android.view.View.performClick(View.java:4438) 
W/System.err:  at android.view.View$PerformClick.run(View.java:18422) 
W/System.err:  at android.os.Handler.handleCallback(Handler.java:733) 
W/System.err:  at android.os.Handler.dispatchMessage(Handler.java:95) 
W/System.err:  at android.os.Looper.loop(Looper.java:136) 
W/System.err:  at android.app.ActivityThread.main(ActivityThread.java:5001) 
W/System.err:  at java.lang.reflect.Method.invokeNative(Native Method) 
W/System.err:  at java.lang.reflect.Method.invoke(Method.java:515) 
W/System.err:  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785) 
W/System.err:  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601) 
W/System.err:  at dalvik.system.NativeStart.main(Native Method) 
+1

NullPointerException hangi satırda? StackTrace'in tamamını yayınlayabilir misiniz? –

+0

Tam istisna mesajı, Boş İşaretçi Kural Dışı Özel Durumunu atan belirli bir satır numarası verecektir. Kodunuzda hangi satırın bu hata mesajı ile gösterildiğini bize söylerseniz, muhtemelen size yardımcı olabiliriz. –

+2

Bu sınıf, bir etkinliğin geçersiz bir uygulaması gibi görünüyor, çünkü bir “onCreate()” yöntemine sahip değilsiniz, kaynak tarafından yönlendirilen "bağlam" alanına sahip değilsiniz. – CommonsWare

cevap

0

Bir Activity sınıfı kendini başlatamazsınız. Sistemin bunu yapmasına izin ver. Faaliyetler sadece Intent kullanılarak başlatılabilir, aksi halde önemli alanlar düzgün şekilde başlatılamaz.

Eğer işlevselliği ayrı bir sınıfa yerleştirmek isterseniz, Activity'u uzatmayın ve gerekli bağlamı parametre olarak iletmeyin.

+0

Ancak, yeni bir etkinlik başlatmıyorum. Ana faaliyetimde yaptığım tek şey varlıkları okuma yöntemini çağırıyor. – definitelyNotLazy

+0

Ve bu yöntem, 'Activity' başlatılmadığı için çalışmayan getAssets' işlevini çağırır. – Henry

+0

Yani, eğer sınıf bir etkinlik değilse, sadece işlevsellik sınıfı biraz iş yaparken, varlıklara erişim sağlayamıyor mu? – definitelyNotLazy