Android 片段中的doInBackground中出现错误

Android 片段中的doInBackground中出现错误,android,Android,我已尝试创建3个选项卡。每个选项卡将从数据库加载数据并显示它。 请用下面的代码告诉我这个问题。我完全被碎片弄糊涂了 public class PatientDetail extends Fragment { public static Context ctx; EditText id; EditText name; EditText age; EditText gender; EditText room; EditText bed; EditText email; EditText phon

我已尝试创建3个选项卡。每个选项卡将从数据库加载数据并显示它。 请用下面的代码告诉我这个问题。我完全被碎片弄糊涂了

public class PatientDetail extends Fragment {

public static Context ctx;

EditText id;
EditText name;
EditText age;
EditText gender;
EditText room;
EditText bed;
EditText email;
EditText phone;
EditText adate;
EditText address;

String pid = "100";

private ProgressDialog pDialog;

// JSON parser class
JSONParser jsonParser = new JSONParser();

// single product url
private static final String url_product_detials = "http://10.105.87.29/get_patient_details.php";


// JSON Node names
private static final String TAG_SUCCESS = "success";
private static final String TAG_PRODUCT = "product";
private static final String TAG_ID = "patient_id";
private static final String TAG_NAME = "patient_name";
private static final String TAG_ROOM = "room_no";
private static final String TAG_BED = "bed_no"; 
private static final String TAG_EMAIL = "email";
private static final String TAG_PHONE ="phone";
private static final String TAG_AGE ="age";
private static final String TAG_GENDER ="gender";
private static final String TAG_DATE ="admission_date";
private static final String TAG_ADDRESS ="address";

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {

    new GetPatientDetails().execute();

    return (RelativeLayout) inflater.inflate(R.layout.patient_details, container, false);
}
类GetPatientDetails扩展异步任务{

/**
 * Before starting background thread Show Progress Dialog
 * */
@凌驾 受保护的void onPreExecute(){ super.onPreExecute(); }

/**
*在后台线程中获取产品详细信息
* */
受保护的字符串doInBackground(字符串…参数){
//从后台线程更新UI
((活动)ctx.runOnUiThread(新的可运行的(){
公开募捐{
//检查成功标签
成功;
试一试{
//建筑参数
List params=new ArrayList();
添加参数(新的BasicNameValuePair(“患者id”,pid.toString());
//通过发出HTTP请求获取产品详细信息
//请注意,产品详细信息url将使用GET请求
JSONObject json=jsonParser.makeHttpRequest(
url(产品详细信息,“获取”,参数);
//检查日志中的json响应
Log.d(“单一产品详细信息”,json.toString());
//json成功标记
success=json.getInt(TAG_success);
如果(成功==1){
//已成功接收产品详细信息
JSONArray productObj=json
.getJSONArray(TAG_PRODUCT);//JSON数组
//从JSON数组中获取第一个产品对象
JSONObject product=productObj.getJSONObject(0);
//找到具有此pid的产品
//编辑文本
name=(EditText)getView().findViewById(R.id.name);
age=(EditText)getView().findViewById(R.id.age);
性别=(EditText)getView().findViewById(R.id.gender);
id=(EditText)getView().findViewById(R.id.id);
email=(EditText)getView().findViewById(R.id.email);
phone=(EditText)getView().findViewById(R.id.phone);
adate=(EditText)getView().findViewById(R.id.adate);
room=(EditText)getView().findViewById(R.id.room);
bed=(EditText)getView().findViewById(R.id.bed);
地址=(EditText)getView().findViewById(R.id.address);
//在编辑文本中显示产品数据
name.setText(product.getString(TAG_name));
age.setText(product.getString(TAG_age));
setText(product.getString(TAG_-gender));
id.setText(product.getString(TAG_id));
email.setText(product.getString(TAG_email));
setText(product.getString(TAG_phone));
adate.setText(product.getString(TAG_DATE));
room.setText(product.getString(TAG_room));
bed.setText(product.getString(TAG_bed));
address.setText(product.getString(TAG_address));
}否则{
//找不到具有pid的产品
}
}捕获(JSONException e){
e、 printStackTrace();
}
}
});
返回null;
}
/**
*完成后台任务后,关闭“进度”对话框
* **/
受保护的void onPostExecute(字符串文件\u url){
//获得所有详细信息后关闭对话框
//pDialog.disclose();
super.onPostExecute(文件\ url);
}
}

}

我很抱歉发布了这么长的代码


谢谢

我认为问题就在这里:在视图启动之前执行
doInBackground()
。 第二件事是,您应该将所有UI更改放在
onPostExecute()
中,
doInBackground()
用于应该在后台执行的长时间操作。

public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {



    View view = inflater.inflate(R.layout.patient_details, container, false);
    new GetPatientDetails().execute();

   return view;
}

在您的情况下,让您的
doInBackground()
方法返回一个
JSONObject
(您从WS调用中获得),然后在
onPostExecute()
方法中,将JSON中的数据显示到视图中。(
editText

从logcat添加异常的堆栈跟踪什么使您认为有问题?我得到了致命的异常logcat:执行doinbackgroung()时出错;添加异常的完整堆栈跟踪,这一行没有帮助,否则请参见下面我的答案,我认为您在启动任务之前没有初始化视图我添加了堆栈跟踪..请检查是的,您应该先尝试膨胀视图,然后甚至可能在恢复时在片段中调用异步添加异常的完整堆栈跟踪,这样我们可以确定崩溃的原因:)
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {



    View view = inflater.inflate(R.layout.patient_details, container, false);
    new GetPatientDetails().execute();

   return view;
}