2016-05-23 7 views
0

URLでテキストファイルを読み込む関数を書いた。それは私がコンパイルし、コマンドラインでjava(アンドロイドではない)を使って実行したときに働いた。しかし、私はAndroidスタジオのAsyncTaskに関数を移植します。それは単にクラッシュします。 ここにコードがあります。 。あなたは:(おかげトンを何が起こっているかを教えてもらえAndroid:AsyncTaskがURLからテキストを読むときにクラッシュする

private class getjstr extends AsyncTask<String,Void,String> { 
    @Override 
    protected void onPreExecute(){ 
     MainActivity.this.tv1.setText("STart"); //This is a TextView 
    } 

    @Override 
    protected String doInBackground(String... URLArr){ 
     String result=""; 
     String textURL=URLArr[0]; 
     try{ 
      URL URLObj = new URL(textURL); 
      BufferedReader bufReader = new BufferedReader(new InputStreamReader(URLObj.openStream())); 
      String tmpStr; 
      while((tmpStr=bufReader.readLine())!=null){ 
       result=result + tmpStr; 
      } 
      bufReader.close(); 
     } 
     catch (Exception e){ 
      e.printStackTrace(); 
     } 

     return result; 
    } 

    @Override 
    protected void onPostExecute(String result){ 
     MainActivity.this.JString = result; 
    } 
} 

Logcat

05-23 17:12:20.591 32581-32581/com.momo.tobedelete E/AndroidRuntime: FATAL EXCEPTION: main 
    Process: com.momo.tobedelete, PID: 32581 
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.momo.tobedelete/com.momo.tobedelete.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'int java.lang.String.length()' on a null object reference 
     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3190) 
     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3300) 
     at android.app.ActivityThread.access$1000(ActivityThread.java:211) 
     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1705) 
     at android.os.Handler.dispatchMessage(Handler.java:102) 
     at android.os.Looper.loop(Looper.java:145) 
     at android.app.ActivityThread.main(ActivityThread.java:6946) 
     at java.lang.reflect.Method.invoke(Native Method) 
     at java.lang.reflect.Method.invoke(Method.java:372) 
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1404) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1199) 
     Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'int java.lang.String.length()' on a null object reference 
     at com.momo.tobedelete.MainActivity.onCreate(MainActivity.java:51) 
     at android.app.Activity.performCreate(Activity.java:6575) 
     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1134) 
     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3143) 
     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3300)  
     at android.app.ActivityThread.access$1000(ActivityThread.java:211)  
     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1705)  
     at android.os.Handler.dispatchMessage(Handler.java:102)  
     at android.os.Looper.loop(Looper.java:145)  
     at android.app.ActivityThread.main(ActivityThread.java:6946)  
     at java.lang.reflect.Method.invoke(Native Method)  
     at java.lang.reflect.Method.invoke(Method.java:372)  
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1404)  
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1199)  
05-23 17:24:00.786 2033-2033/com.momo.tobedelete E/AndroidRuntime: FATAL EXCEPTION: main 
    Process: com.momo.tobedelete, PID: 2033 
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.momo.tobedelete/com.momo.tobedelete.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'int java.lang.String.length()' on a null object reference 
     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3190) 
     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3300) 
     at android.app.ActivityThread.access$1000(ActivityThread.java:211) 
     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1705) 
     at android.os.Handler.dispatchMessage(Handler.java:102) 
     at android.os.Looper.loop(Looper.java:145) 
     at android.app.ActivityThread.main(ActivityThread.java:6946) 
     at java.lang.reflect.Method.invoke(Native Method) 
     at java.lang.reflect.Method.invoke(Method.java:372) 
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1404) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1199) 
    Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'int java.lang.String.length()' on a null object reference 
     at com.momo.tobedelete.MainActivity.onCreate(MainActivity.java:51) 
     at android.app.Activity.performCreate(Activity.java:6575) 
     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1134) 
     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3143) 
     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3300)  
     at android.app.ActivityThread.access$1000(ActivityThread.java:211)  
     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1705)  
     at android.os.Handler.dispatchMessage(Handler.java:102)  
     at android.os.Looper.loop(Looper.java:145)  
     at android.app.ActivityThread.main(ActivityThread.java:6946)  
     at java.lang.reflect.Method.invoke(Native Method)  
     at java.lang.reflect.Method.invoke(Method.java:372)  
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1404)  
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1199)  

onCreateをMainActivityに:。

public class MainActivity extends AppCompatActivity { 

    List<Country> lc; 
    String JString; 
    TextView tv1; 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 

     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     tv1 = (TextView) findViewById(R.id.tv100); 

     String jurl = "https://dl.dropboxusercontent.com/u/98107627/feature_list_json"; 
     new getjstr().execute(jurl); 

     this.tv1.setText(this.JString); 
    } 

    /*AsyncTask goes here*/ 
} 

私の知る限りでは、それが思われますAsyncTaskが新しい値をthisに割り当てませんでした.JString

+0

クラッシュログを表示 –

+0

あなたはlogcatを意味しますか? – phong

+0

はいlogcatの結果を表示してください –

答えて

2
this.tv1.setText(this.JString); 

この行でエラーが発生しています。 onCreate()から削除します。

onCreate()ではなくpostExecuteにテキストを設定します。

+0

聖なる$ h1t、それは動作します!ありがとう。しかし、私は変数にデータを抽出することができますか? – phong

+0

よろしくお願いいたします。大きなタスクを実行する場合は、使用したとおりにAsyncTaskを使用する必要があります。それは標準的な方法です。 –

0

限り、私はあなたがAsyncTaskの結果に基づいてのTextViewを更新しようとしているあなたのコードを理解し、あなたがAsyncTaskクラス定義のようなものであるべきだとして:結果パラメータがある

new AsyncTask<String ,Void, String >() 

を文字列;その後、あなたのonPostExecuteメソッド内で、あなたのようなものがあります:

@Override 
protected void onPostExecute(String s) { 
    super.onPostExecute(s); 
} 

を、あなたはあなたのビューを更新することができます!

doInBackground()メソッドで、textviewに挿入する文字列を返す必要があることに注意してください。

関連する問題