【发布时间】:2015-05-02 09:55:37
【问题描述】:
抱歉,这是一个重复的帖子,因为我之前上传了一个版本,但那个版本没有这个版本的任何答案。
我在 android 编程中遇到了 asyncTask 的问题。我正在尝试在 asyncTask 的后台线程中加载文本文件。首先,在我的应用程序中,我从一个由数组列表控制的类中发送一个变量,该数组列表稍后由 xml 文件中的一个按钮控制到 asyncTask 类,因为它通过微调器选择索引。当涉及到后台线程类时,它失败了,因为我不太了解那部分。如果有不清楚的地方,请询问,因为我是 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;
}
}
一个人要求另一个可能是问题的课程:
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
【问题讨论】:
-
我无法添加错误日志的最后一部分。如果有人能做到,谢谢
-
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1283) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1099) 在 dalvik。 system.NativeStart.main(Native Method) 引起:java.lang.reflect.InvocationTargetException at java.lang.reflect.Method.invokeNative(Native Method)
-
在 java.lang.reflect.Method.invoke(Method.java:515) 在 android.view.View$1.onClick(View.java:3964) 在 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.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:515) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1283) at com.android.internal.os.ZygoteInit .main(ZygoteInit.java:1099) at dalvik.system.NativeStart.main(Native Method) 引起:java.lang.NullPointerException at
-
com.example.arnpet.ultimatehogskoleprovet.pagebeforeAction.submit(pagebeforeAction.java:82) 在 java.lang.reflect.Method.invokeNative(Native Method) 在 java.lang.reflect.Method.invoke (Method.java:515) 在 android.view.View$1.onClick(View.java:3964) 在 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) a
标签: java android multithreading android-asynctask