在android java中运行AsyncTask的问题

在android java中运行AsyncTask的问题,java,android,multithreading,android-asynctask,Java,Android,Multithreading,Android Asynctask,抱歉,这是一篇重复的文章,因为我之前上传了一个版本,但那个版本没有这个版本的答案 我在android编程中遇到asyncTask问题。我正在尝试在后台线程中加载一个文本文件,该线程是异步任务。首先,在我的应用程序中,我将一个变量从一个由数组列表控制的类发送到asyncTask类,该数组列表随后由xml文件中的按钮控制,因为它通过微调器选择索引。当涉及到后台线程类时,它失败了,因为我不太了解那个部分。如果有什么不清楚的地方,请询问,因为我是android编程的初学者。感谢您的帮助 以下是发送变量的

抱歉,这是一篇重复的文章,因为我之前上传了一个版本,但那个版本没有这个版本的答案

我在android编程中遇到asyncTask问题。我正在尝试在后台线程中加载一个文本文件,该线程是异步任务。首先,在我的应用程序中,我将一个变量从一个由数组列表控制的类发送到asyncTask类,该数组列表随后由xml文件中的按钮控制,因为它通过微调器选择索引。当涉及到后台线程类时,它失败了,因为我不太了解那个部分。如果有什么不清楚的地方,请询问,因为我是android编程的初学者。感谢您的帮助

以下是发送变量的代码:

protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_game_action);

    Intent callingIntent = getIntent();
    int index = callingIntent.getIntExtra("INDEX",0);

    if(index==0){

        fileReader_async=new FileReader_async(getApplicationContext(), this);
        fileReader_async.execute("hogskoleprovet.txt");

    }
    else {
        if (index == 1) {
            fileReader_async = new FileReader_async(getApplicationContext(), this);
            fileReader_async.execute("hogskoleprovet.txt");

        } else if (index == 1) {
            fileReader_async = new FileReader_async(getApplicationContext(), this);
            fileReader_async.execute("hogskoleprovet.txt");


       }
    }

    setNewQuestion();



}
以下是异步类:

package com.example.arnpet.ultimatehogskoleprovet;

import android.content.Context;
import android.os.AsyncTask;
import com.example.arnpet.ultimatehogskoleprovet.Question;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;

import javax.security.auth.callback.Callback;

public class FileReader_async extends AsyncTask {
private Context context;
private Callback callback;
private List<Question> mQuestions;
public FileReader_async(Context context,Callback callback)
{
    this.callback=callback;
}
@Override
protected Object doInBackground(Object... params) {
    InputStream iS = null;
    try {
        iS = context.getAssets().open("hogskoleprovet");
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    BufferedReader reader = new BufferedReader(new InputStreamReader(iS));

    mQuestions = new ArrayList<Question>();


    String question, answer, answerOne, answerTwo, answerThree, answerFour;



    try {
        while (reader.readLine() != null) {

            //reading some lines from resource file
            question = reader.readLine();
            answer = reader.readLine();
            answerOne = reader.readLine();
            answerTwo = reader.readLine();
            answerThree = reader.readLine();
            answerFour = reader.readLine();
            Question q = new Question(question, answer, answerOne, answerTwo, answerThree, answerFour);
            mQuestions.add(q);
            break;
        }
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    try {
        reader.close();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    return 0;
}
@Override
protected void onPostExecute(Object result) {
    // TODO Auto-generated method stub
    super.onPostExecute(result);
    callback.notify_result(mQuestions);
}
public interface Callback {

    public void notify_result(List<Question> question_list);


}
public int getQuestionsLeft() {
    return mQuestions.size();
}

public Question getRandomQuestion() {
    Random random = new Random();
    int index = random.nextInt(mQuestions.size());
    Question newQuestion = mQuestions.get(index);
    mQuestions.remove(index);
    return newQuestion;

}

package com.example.arnpet.ultimatehogskoleprovet;
导入android.content.Context;
导入android.os.AsyncTask;

导入com.example.arnpet.ultimatehogskoleprovet.Question; 导入java.io.BufferedReader; 导入java.io.IOException; 导入java.io.InputStream; 导入java.io.InputStreamReader; 导入java.util.ArrayList; 导入java.util.List; 导入java.util.Random; 导入javax.security.auth.callback.callback; 公共类FileReader\u async扩展了AsyncTask{ 私人语境; 私有回调; 私有列表mQuestions; 公共文件读取器异步(上下文上下文,回调) { this.callback=callback; } @凌驾 受保护对象doInBackground(对象…参数){ InputStream=null; 试一试{ iS=context.getAssets().open(“hogskoleprovet”); }捕获(IOE异常){ //TODO自动生成的捕捉块 e、 printStackTrace(); } BufferedReader reader=新的BufferedReader(新的InputStreamReader(iS)); mQuestions=newarraylist(); 串问题,回答,回答一,回答二,回答三,回答四; 试一试{ while(reader.readLine()!=null){ //从资源文件中读取一些行 问题=reader.readLine(); 答案=reader.readLine(); answerOne=reader.readLine(); answerTwo=reader.readLine(); answerThree=reader.readLine(); answerFour=reader.readLine(); 问题q=新问题(问题、答案、答案一、答案二、答案三、答案四); mQuestions.add(q); 打破 } }捕获(IOE异常){ //TODO自动生成的捕捉块 e、 printStackTrace(); } 试一试{ reader.close(); }捕获(IOE异常){ //TODO自动生成的捕捉块 e、 printStackTrace(); } 返回0; } @凌驾 受保护的void onPostExecute(对象结果){ //TODO自动生成的方法存根 super.onPostExecute(结果); 回调。通知_结果(mQuestions); } 公共接口回调{ 公共无效通知结果(列表问题列表); } public int getQuestionsLeft(){ 返回mQuestions.size(); } 公共问题{ 随机=新随机(); int index=random.nextInt(mQuestions.size()); Question newQuestion=mQuestions.get(索引); mQuestions.remove(索引); 返回新问题; }
}

有人要求参加另一个可能是问题所在的课程:

public class pagebeforeAction extends Activity {

private Spinner spinnerOne;
private Button btnSubmit;

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

    spinnerOne = (Spinner) findViewById(R.id.spinnerOne);
    List<String> list = new ArrayList<String>();
    list.add("Nivå 1");
    list.add("Nivå 2");
    list.add("Nivå 3");
    list.add("Nivå 4");
    list.add("Nivå 5");

    ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>
            (this, android.R.layout.simple_spinner_item,list);

    dataAdapter.setDropDownViewResource
            (android.R.layout.simple_spinner_dropdown_item);

    spinnerOne.setAdapter(dataAdapter);

    // Spinner item selection Listener
    addListenerOnSpinnerItemSelection();




}


public void returnOne(View v){
    Intent intent = new Intent(this, MainActivity.class);
    Button button = (Button) findViewById(R.id.buttonTwo);
    startActivity(intent);
}





// Add spinner data

public void addListenerOnSpinnerItemSelection(){

    spinnerOne.setOnItemSelectedListener(new CustomOnItemSelectedListener());
}

//get the selected dropdown list value
public void submit(View v)
{
    Button btnSubmit = (Button) findViewById(R.id.submit);
    Intent intent = new Intent (this, gameAction.class);
    Toast.makeText(pagebeforeAction.this,
            "On Button Click : " +
                    "\n" + String.valueOf(spinnerOne.getSelectedItem()) ,
            Toast.LENGTH_LONG).show();

    int index = Integer.parseInt(btnSubmit.getTag().toString());
    intent.putExtra("INDEX",index);
    startActivity(intent);


}








05-02 09:04:28.823  29549-29549/com.example.arnpet.ultimatehogskoleprovet E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.example.arnpet.ultimatehogskoleprovet, PID: 29549
java.lang.IllegalStateException: Could not execute method of the activity
        at android.view.View$1.onClick(View.java:3969)
        at android.view.View.performClick(View.java:4637)
        at android.view.View$PerformClick.run(View.java:19422)
            at android.os.Handler.handleCallback(Handler.java:733)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:136)
        at android.app.ActivityThread.main(ActivityThread.java:5479)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:515)
        at 
public class pagebeforeAction扩展活动{
私人纺纱机;
私人按钮btnSubmit;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u pagebefore\u action);
喷丝头=(喷丝头)findViewById(R.id.喷丝头);
列表=新的ArrayList();
列表。添加(“Nivå1”);
添加(“Nivå2”);
添加(“Nivå3”);
添加(“Nivå4”);
列表。添加(“Nivå5”);
ArrayAdapter dataAdapter=新的ArrayAdapter
(这是android.R.layout.simple\u微调器\u项,列表);
dataAdapter.setDropDownViewResource
(android.R.layout.simple\u微调器\u下拉菜单\u项);
喷丝头1.setAdapter(数据适配器);
//微调器项选择侦听器
addListenerOnSpinnerItemSelection();
}
公共空间一(视图五){
意向意向=新意向(此,MainActivity.class);
Button Button=(Button)findViewById(R.id.buttonTwo);
星触觉(意向);
}
//添加微调器数据
public void addListenerOnSpinnerItemSelection(){
spinnerOne.setOnItemSelectedListener(新的CustomOnItemSelectedListener());
}
//获取选定的下拉列表值
公开作废提交(视图五)
{
按钮btnSubmit=(按钮)findViewById(R.id.submit);
意向意向=新意向(这个,gameAction.class);
Toast.makeText(pagebeforeAction.this,
“单击按钮时:”+
“\n”+String.valueOf(spinnerOne.getSelectedItem()),
Toast.LENGTH_LONG).show();
int index=Integer.parseInt(btnSubmit.getTag().toString());
意向。额外(“索引”,索引);
星触觉(意向);
}

05-02 09:04:28.823 29549-29549/com.example.arnpet.ultimatehogskoleprovet E/AndroidRuntime﹕ 致命异常:主
流程:com.example.arnpet.ultimatehogskoleprovet,PID:29549 java.lang.IllegalStateException:无法执行活动的方法 在android.view.view$1.onClick上(view.java:3969) 在android.view.view.performClick上(view.java:4637) 在android.view.view$PerformClick.run(view.java:19422) 位于android.os.Handler.handleCallback(Handler.java:733) 位于android.os.Handler.dispatchMessage(Handler.java:95) 位于android.os.Looper.loop(Looper.java:136) 位于android.app.ActivityThread.main(ActivityThread.java:5479)
位于java.lang.reflect.Method.Invokenactive(本机方法)
位于java.lang.reflect.Method.invoke(Method.java:515) 在
我通过在您的活动中创建一个公共方法而不是
回调来解决此问题。通知结果(mQuestions)
yo将执行以下操作:

activity.notify_结果(mQuestions);
i
((ActivityName) context).notify_result(mQuestions);