-1

これが私のコードです

package com.example.rollsystems;

import java.util.ArrayList;
import org.dto.Student;

import android.os.AsyncTask;
import android.os.Bundle;
import android.widget.ListView;
import android.widget.TextView;
import android.app.Activity;
import android.content.Context;
import com.example.listview.*;

import com.example.Utils.AllBO;
import com.example.rollsystems.R;

public class RollCallActivity extends Activity {

    ArrayList<Student> array;
    ListStudentAdapter arrayAdapter;
    ListView list;

    TextView txtClassAt;
    TextView txtSubjectAt;
    TextView txtInstructorAt;
    TextView txtTimeAt;
    TextView txtDateAt;
    Context context;

    public class RollCallTask extends AsyncTask<Void, Void, Void> {

        public RollCallActivity activity;

        public RollCallTask(RollCallActivity a)
        {
            activity = a;
        }
        @Override
        protected Void doInBackground(Void... params) {
            //SharedPreferences sharedPref = getApplicationContext().getSharedPreferences("rs", Context.MODE_PRIVATE);
            //String RollCallID = sharedPref.getString("RollCallID", "14");

                String RollCallID = "14";
                list = (ListView)findViewById(R.id.listAtStudent);
                ArrayList<Student> rollCalls = new AllBO().getRollCallInfo(RollCallID);
                array = rollCalls;

            return  null;
        }
        @Override
        protected void onPostExecute(Void result) {
            // TODO Auto-generated method stub
            super.onPostExecute(result);
            arrayAdapter = new ListStudentAdapter(activity, R.layout.list_atstudent, array);
            list.setAdapter(arrayAdapter);
            txtClassAt = (TextView) findViewById(R.id.txtClassAt);
        }

    }

    /** Called when the activity is first created. */

      @Override
      public void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.tab_rollcall);

            new RollCallTask(this).execute();
            txtClassAt = (TextView) findViewById(R.id.txtClassAt);

        }


}

そして、私が実行すると:

E/AndroidRuntime(883): FATAL EXCEPTION: AsyncTask #1
E/AndroidRuntime(883): java.lang.RuntimeException: An error occured while executing
doInBackground()
E/AndroidRuntime(883):  at android.os.AsyncTask$3.done(AsyncTask.java:278)

すべての助けは貴重です

4

3 に答える 3

0

MainActivity の Handler オブジェクトを使用して、ランナブルを投稿します。バックグラウンドから使用するには、オブジェクトを MainActivity の外部で呼び出すことができる静的にするか、Activity の静的インスタンスを作成してアクセスする必要があります。

アクティビティの内部

private static Handler handler;


handler = new Handler();

handler().post(new Runnable() {

    public void run() {
        //ui stuff here :)
    }
});

public static Handler getHandler() {
   return handler;
}

活動外

MainActivity.getHandler().post(new Runnable() {

        public void run() {
            //ui stuff here :)
        }
    });
于 2013-10-13T08:42:40.817 に答える
0

バックグラウンド スレッドから UI にアクセスしようとしています。の外でそれを行う必要がありますdoInBackground

AsyncTaskまた、UI スレッドから呼び出す必要があります。そうしないと、実行時エラーが発生します。

public class RollCallTask extends AsyncTask<Void, Void, Void> {

    public RollCallActivity activity;

    public RollCallTask(RollCallActivity a)
    {
        activity = a;
    }        

    @Override
    protected Void doInBackground(Void... params) {
        //SharedPreferences sharedPref = getApplicationContext().getSharedPreferences("rs", Context.MODE_PRIVATE);
        //String RollCallID = sharedPref.getString("RollCallID", "14");

        String RollCallID = "14";
        ArrayList<Student> rollCalls = new AllBO().getRollCallInfo(RollCallID);
        array = rollCalls;

        return  null;
    }
}

そして、あなたonCreate

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.tab_rollcall);

        list = (ListView)findViewById(R.id.listAtStudent);
        txtClassAt = (TextView) findViewById(R.id.txtClassAt);
        new RollCallTask(this).execute();

    }
于 2013-10-13T08:38:21.783 に答える
0

非同期タスクが UI にアクセスしています。その中でやらず、アクティビティ/フラグメントからfindViewById使用してください。onCreate

また、いくつかの規則の問題があります。

String RollCallID = "14";
list = (ListView)findViewById(R.id.listAtStudent);
ArrayList<Student> rollCalls = new AllBO().getRollCallInfo(RollCallID);
array = rollCalls;
  • 変数は大文字で始めてはいけませんrollCallID

  • xml id はキャメルケースであってはなりませんR.id.list_as_student

  • 配列はアダプターの外部では使用されません。なぜアダプターの外部で変数を使用するのですか?
于 2013-10-13T08:40:15.670 に答える