嗨朋友们,我知道有很多关于这个话题的问题,但我无法从中得到任何结果。我用我的ClassIsInternalParser扩展默认处理程序解析xml数据。我在内部类的活动中使用此类PostAsync扩展了AsyncTask
但原因是我无法将PostAsync类中收集的数据返回到主要活动。它只设置为空
这是我的代码
package com.example.uiexercisesplash;
import android.app.Activity;
import android.app.ProgressDialog;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
public class ClassIsInternalListViewActivity extends Activity implements OnClickListener{
TextView tv, tv2;
Button back;
String[][] array = new String[10][3];
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.classisinternal_listview);
new PostAsync().execute();
tv=(TextView) findViewById(R.id.tatar);
tv2= (TextView) findViewById(R.id.tatar2);
tv2.setText(array[0][0]); //Why this sets null!!
back= (Button) findViewById(R.id.back);
back.setOnClickListener(this);
}
class PostAsync extends AsyncTask<Void, Void,String[][]>{
ProgressDialog pd;
ClassIsInternalParser parser;
@Override
protected void onPreExecute() {
//we can set up variables here
pd = ProgressDialog.show(ClassIsInternalListViewActivity.this,
"Classisinternal","Loading last post...",true,false);
}
protected void onPostExecute(String[][] result) {
//in this way it sets correctly
tv.setText(result[0][0]);
array=result;
pd.dismiss();
pd.cancel();
}
protected String[][] doInBackground(Void... params) {
parser = new ClassIsInternalParser();
parser.get();
return parser.dataArray;
}
}
@Override
public void onClick(View v) {
finish();
}
}
答案 0 :(得分:0)
tv2.setText(array[0][0]);
为null,因为在设置值之前获取数组值,即。在完成Asynctask之前执行tv2.setText(array[0][0]);
。
所以在onPostExecute
方法中执行此步骤为
protected void onPostExecute(String[][] result) {
//in this way it sets correctly
tv.setText(result[0][0]);
tv2.setText(result[0][2]);
array=result;
tv2.setText(array[0][0]);// add here
pd.dismiss();
pd.cancel();
}
答案 1 :(得分:0)
尝试创建PostAsync对象并从该对象调用execute()
。之后调用get()
方法来检索返回数组,如下所示:
PostAsync obj=new PostAsync(this);
obj.execute();
String[][] array=obj.get();
tv2.setText(array[0][0]);