2012-03-30 7 views
0

私はクラスのユーザーを作成しているように、このためにAsyncTaskがクラスを返すパラメータとして受け入れないのはなぜですか?

AsyncTask<Void, Void, MyClass> 

などのカスタムクラスの型を返す私のAsyncTaskを設定しようとしています。 ファイル:

package com.asynctask.namespace; 
import java.util.ArrayList; 

public class User 
{ 
    private ArrayList<String> name; 

    public void addName(String value) 
    {  
     name.add(value); 
    } 

    public String getName(int pos) 
    {  
     return name.get(pos).toString(); 
    } 
} 

User.java

私の主な活動では、私が持っている:

package com.asynctask.namespace; 

import android.app.Activity; 
import android.app.ProgressDialog; 
import android.os.AsyncTask; 
import android.os.Bundle; 
import android.widget.TextView; 

public class AsyncTaskExampleActivity extends Activity { 
    private TextView result; 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     //setContentView(R.layout.main); 

     result = new TextView(this); 
     setContentView(result); 

     new loadData().execute();   
    } 
    // --- Subclass --- // 
    private class loadData extends AsyncTask<Void, Void, User> 
    {  
     ProgressDialog progDialog; 
     User client = new User(); 

     protected void onPreExecute() 
     { 
      progDialog = new ProgressDialog(AsyncTaskExampleActivity.this); 
      progDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER); 
      progDialog.setMessage("Conectando a base de dados..."); 
      progDialog.show(); 
     } 

     protected User doInBackground(Void... args) 
     { 
      client.addName("testName");   
      return client; 
     } 

     protected void onPostExecute(User values) 
     {     
      progDialog.dismiss(); 
      result.setText(values.getName(0)); 

     } 

    } 

} 

I取得するには、次Logcatエラー:

04-02 13:45:05.683: W/dalvikvm(1056): threadid=15: thread exiting with uncaught exception (group=0x4001b188) 
04-02 13:45:05.683: E/AndroidRuntime(1056): Uncaught handler: thread AsyncTask #1 exiting due to uncaught exception 
04-02 13:45:05.783: E/AndroidRuntime(1056): java.lang.RuntimeException: An error occured while executing doInBackground() 
04-02 13:45:05.783: E/AndroidRuntime(1056):  at android.os.AsyncTask$3.done(AsyncTask.java:200) 
04-02 13:45:05.783: E/AndroidRuntime(1056):  at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273) 
04-02 13:45:05.783: E/AndroidRuntime(1056):  at java.util.concurrent.FutureTask.setException(FutureTask.java:124) 
04-02 13:45:05.783: E/AndroidRuntime(1056):  at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307) 
04-02 13:45:05.783: E/AndroidRuntime(1056):  at java.util.concurrent.FutureTask.run(FutureTask.java:137) 
04-02 13:45:05.783: E/AndroidRuntime(1056):  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1068) 
04-02 13:45:05.783: E/AndroidRuntime(1056):  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:561) 
04-02 13:45:05.783: E/AndroidRuntime(1056):  at java.lang.Thread.run(Thread.java:1096) 
04-02 13:45:05.783: E/AndroidRuntime(1056): Caused by: java.lang.NullPointerException 
04-02 13:45:05.783: E/AndroidRuntime(1056):  at com.asynctask.namespace.User.addName(User.java:11) 
04-02 13:45:05.783: E/AndroidRuntime(1056):  at com.asynctask.namespace.AsyncTaskExampleActivity$loadData.doInBackground(AsyncTaskExampleActivity.java:39) 
04-02 13:45:05.783: E/AndroidRuntime(1056):  at com.asynctask.namespace.AsyncTaskExampleActivity$loadData.doInBackground(AsyncTaskExampleActivity.java:1) 
04-02 13:45:05.783: E/AndroidRuntime(1056):  at android.os.AsyncTask$2.call(AsyncTask.java:185) 
04-02 13:45:05.783: E/AndroidRuntime(1056):  at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305) 
04-02 13:45:05.783: E/AndroidRuntime(1056):  ... 4 more 
04-02 13:45:05.903: I/dalvikvm(1056): threadid=7: reacting to signal 3 
04-02 13:45:06.093: I/dalvikvm(1056): Wrote stack trace to '/data/anr/traces.txt' 

任意のアイデアなぜですか?

ご協力いただきありがとうございます。 ハッピーコーディング!

+6

エラーメッセージがありますか? – Jeroen

+1

あなたのコードはコンパイルされるか、文字列名は設定されませんか? 「これは正しく動作していません」と言ったときに具体的にしてください。私はaddNameに本文に誤字があることに気付きました。 – Bill

+3

大文字でクラス名を始めるというJavaの命名規則に従う必要があります。他のものはちょうど混乱しています。 –

答えて

0

アレイリストnameを使用する前に初期化する必要があります。試してみてください:

package com.asynctask.namespace; 
import java.util.ArrayList; 

public class User 
{ 
    // initialize before use 
    private ArrayList<String> name = new ArrayList<String>(); 

    public void addName(String value) 
    {  
     name.add(value); 
    } 

    public String getName(int pos) 
    {  
     return name.get(pos).toString(); 
    } 
} 
+0

ねえ、私はミステリーが解決されたと思います。ありがとうフランク! – Eric

関連する問題