2012-03-30 6 views
0

Я пытаюсь установить мой AsyncTask возвращающегося пользовательского типа класса, такие какПочему AsyncTask не принимает мой класс как возвращаемый параметр?

AsyncTask<Void, Void, MyClass> 

Для этого я создал класс пользователя. Файл: User.java

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(); 
    } 
} 

В моей основной деятельности у меня есть:

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)); 

     } 

    } 

} 

я получаю следующие ошибки 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

Вы должны действительно придерживаться соглашения о присвоении имен в начале имен классов с большой буквы. Все остальное просто сбивает с толку. –

ответ

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

Смежные вопросы