从片段活动onItemClicked [英] onItemClicked from fragment to activity
问题描述
我有项的片段列表视图。当我点击的项目之一,它会打开另一个活动,并显示该项目的详细信息。但是,当进度条加载那么整个应用程序崩溃。
EditProductActivity.java
公共类EditProductActivity延伸活动{的EditText txtName的;
的EditText txtPrice;
的EditText txtDesc;
的EditText txtCreatedAt;
按钮btnSave;
按钮btnDelete;串PID;//进度对话框
私人ProgressDialog pDialog;// JSON解析器类
JSONParser2 jsonParser2 =新JSONParser2();//单品链接
私有静态最后弦乐url_product_detials =http://gemini888.tk/android_connect/get_product_details.php;// URL来更新产品
私有静态最后弦乐url_update_product =http://gemini888.tk/android_connect/update_product.php;// URL删除产品
私有静态最后弦乐url_delete_product =http://gemini888.tk/android_connect/delete_product.php;// JSON节点名称
私有静态最后弦乐TAG_SUCCESS =成功;
私有静态最后弦乐TAG_PRODUCT =产品;
私有静态最后弦乐TAG_PID =PID;
私有静态最后弦乐TAG_NAME =名;
私有静态最后弦乐TAG_PRICE =价格;
私有静态最后弦乐TAG_DESCRIPTION =说明;@覆盖
公共无效的onCreate(捆绑savedInstanceState){
super.onCreate(savedInstanceState);
的setContentView(R.layout.edit_product); //保存按钮
btnSave =(按钮)findViewById(R.id.btnSave);
btnDelete =(按钮)findViewById(R.id.btnDelete); //获取来自意图产品的详细信息
意向I = getIntent(); //从意图获取产品ID(PID)
PID = i.getStringExtra(TAG_PID); //获取在后台线程完整的产品细节
新GetProductDetails()执行(); //保存按钮单击事件
btnSave.setOnClickListener(新View.OnClickListener(){ @覆盖
公共无效的onClick(查看为arg0){
//启动后台任务来更新产品
新SaveProductDetails()执行();
}
}); //删除按钮单击事件
btnDelete.setOnClickListener(新View.OnClickListener(){ @覆盖
公共无效的onClick(查看为arg0){
//在后台线程删除产品
新DeleteProduct()执行();
}
});}/ **
*背景异步任务以获得完整的产品细节
* * /
类GetProductDetails扩展的AsyncTask<字符串,字符串,字符串> { / **
*启动后台线程显示进度对话框之前
* * /
@覆盖
在preExecute保护无效(){
super.on preExecute();
pDialog =新ProgressDialog(EditProductActivity.this);
pDialog.setMessage(装载产品的详细信息,请稍候...);
pDialog.setIndeterminate(假);
pDialog.setCancelable(真);
pDialog.show();
} / **
*获取产品的详细信息在后台线程
* * /
保护字符串doInBackground(字符串... PARAMS){ //从后台线程更新界面
runOnUiThread(新的Runnable(){
公共无效的run(){
//检查成功标记
诠释成功;
尝试{
//大厦参数
清单<&的NameValuePair GT; PARAMS =新的ArrayList<&的NameValuePair GT;();
params.add(新BasicNameValuePair(PID,PID)); //通过HTTP请求获得产品的详细信息
//注意产品的详细信息URL会使用GET请求
JSONObject的JSON = jsonParser2.makeHtt prequest(
url_product_detials,GET,则params); //检查你的日志,JSON响应
Log.d(单一产品详细信息,json.toString()); // JSON的成功标签
成功= json.getInt(TAG_SUCCESS);
如果(成功== 1){
//成功接收产品的详细信息
JSONArray productObj = JSON
.getJSONArray(TAG_PRODUCT); // JSON数组 //从JSON数组的第一个产品对象
的JSONObject产物= productObj.getJSONObject(0); //与本产品的PID发现
//编辑文本
txtName的=(的EditText)findViewById(R.id.inputName);
txtPrice =(EditText上)findViewById(R.id.inputPrice);
txtDesc =(EditText上)findViewById(R.id.inputDesc); //在显示的EditText产品数据
txtName.setText(product.getString(TAG_NAME));
txtPrice.setText(product.getString(TAG_PRICE));
txtDesc.setText(product.getString(TAG_DESCRIPTION)); }其他{
//产品具有pid未找到
}
}赶上(JSONException E){
e.printStackTrace();
}
}
}); 返回null;
} / **
*在完成后台任务之后辞退进度对话框
* ** /
保护无效onPostExecute(字符串FILE_URL){
//关闭该对话框一旦得了所有细节
pDialog.dismiss();
}
}/ **
*背景异步任务保存产品详细信息
* * /
类SaveProductDetails扩展的AsyncTask<字符串,字符串,字符串> { / **
*启动后台线程显示进度对话框之前
* * /
@覆盖
在preExecute保护无效(){
super.on preExecute();
pDialog =新ProgressDialog(EditProductActivity.this);
pDialog.setMessage(节能产品......);
pDialog.setIndeterminate(假);
pDialog.setCancelable(真);
pDialog.show();
} / **
*节能产品
* * /
保护字符串doInBackground(字符串参数... args){ //获得从EditTexts更新数据
字符串名称= txtName.getText()的toString()。
串价格= txtPrice.getText()的toString()。
。字符串描述= txtDesc.getText()的toString(); //大厦参数
清单<&的NameValuePair GT; PARAMS =新的ArrayList<&的NameValuePair GT;();
params.add(新BasicNameValuePair(TAG_PID,PID));
params.add(新BasicNameValuePair(TAG_NAME,名));
params.add(新BasicNameValuePair(TAG_PRICE,价格));
params.add(新BasicNameValuePair(TAG_DESCRIPTION,描述)); //通过发送HTTP请求修改的数据
//注意,更新的产品网址接受POST方法
JSONObject的JSON = jsonParser2.makeHtt prequest(url_update_product,
POST,则params); //检查JSON的成功标签
尝试{
INT成功= json.getInt(TAG_SUCCESS); 如果(成功== 1){
//成功更新
意向I = getIntent();
//发送结果code 100,通知有关产品更新
的setResult(100,i)的;
完();
}其他{
//无法更新产品
}
}赶上(JSONException E){
e.printStackTrace();
} 返回null;
} / **
*在完成后台任务之后辞退进度对话框
* ** /
保护无效onPostExecute(字符串FILE_URL){
//关闭该对话框一旦产品uupdated
pDialog.dismiss();
}
}/ ******************* ****************
*背景异步任务删除产品
* * /
类DeleteProduct扩展的AsyncTask<字符串,字符串,字符串> { / **
*启动后台线程显示进度对话框之前
* * /
@覆盖
在preExecute保护无效(){
super.on preExecute();
pDialog =新ProgressDialog(EditProductActivity.this);
pDialog.setMessage(删除产品......);
pDialog.setIndeterminate(假);
pDialog.setCancelable(真);
pDialog.show();
} / **
*删除产品
* * /
保护字符串doInBackground(字符串参数... args){ //检查成功标记
诠释成功;
尝试{
//大厦参数
清单<&的NameValuePair GT; PARAMS =新的ArrayList<&的NameValuePair GT;();
params.add(新BasicNameValuePair(PID,PID)); //通过HTTP请求获得产品的详细信息
JSONObject的JSON = jsonParser2.makeHtt prequest(
url_delete_product,POST,则params); //检查你的日志,JSON响应
Log.d(删除产品,json.toString()); // JSON的成功标签
成功= json.getInt(TAG_SUCCESS);
如果(成功== 1){
//产品成功删除
//通过发送code 100通知previous活动
意向I = getIntent();
//发送结果code 100,通知有关产品缺失
的setResult(100,i)的;
完();
}
}赶上(JSONException E){
e.printStackTrace();
} 返回null;
} / **
*在完成后台任务之后辞退进度对话框
* ** /
保护无效onPostExecute(字符串FILE_URL){
//关闭该对话框一旦产品被删除
pDialog.dismiss(); }}
}
刚刚作出了一个正确对齐
在logcat的:
5月4日至22日:41:18.881:D /所有产品:(1262):{成功:1,产品:[{created_at:2015- 04-15 21时52分09秒,PID:1,的updated_at:0000-00-00 00:00:00,价格:1111.00,说明:好 名:iphone},{created_at:2015年4月18日2点41分49秒,PID:13,的updated_at:0000-00-00 00:00: 00,价格:60.00,说明:小气鬼,名:三星},{created_at:2015年4月18日3点26分40秒,PID: 14,的updated_at:0000-00-00 00:00:00,价格:1000.00,说明:坏\\ n,名:小蜜},{ created_at:2015年4月21日5时56分55秒,PID:15,的updated_at:0000-00-00 00:00:00,价格:500.00,描述:新,名称:宏},{created_at:2015年4月22日2点58分09秒,PID:16,的updated_at:0000-00 -00 00:00:00,价格:500.00,说明:?? \\ n \\ n,名:??}]}
五月四日至22日:41:35.551:D / dalvikvm(1262):GC_FOR_ALLOC释放253K,9%的游离3667K / 3992K,暂停383ms,393ms总
五月四日至22日:41:39.991:D / AndroidRuntime(1262):关闭VM
五月四日至22日:41:39.991:W / dalvikvm(1262):主题ID = 1:螺纹未捕获的异常(组= 0xb2a54ba8)退出
五月四日至22日:41:40.211:E / AndroidRuntime(1262):致命异常:主要
五月四日至22日:41:40.211:E / AndroidRuntime(1262):工艺:mygp.gptrade,PID:1262
五月四日至22日:41:40.211:E / AndroidRuntime(1262):android.os.NetworkOnMainThreadException
五月四日至22日:41:40.211:E / AndroidRuntime(1262):在android.os.StrictMode $ AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1145)
五月四日至22日:41:40.211:E / AndroidRuntime(1262):在java.net.InetAddress.lookupHostByName(InetAddress.java:385)
五月四日至22日:41:40.211:E / AndroidRuntime(1262):在java.net.InetAddress.getAllByNameImpl(InetAddress.java:236)
五月四日至22日:41:40.211:E / AndroidRuntime(1262):在java.net.InetAddress.getAllByName(InetAddress.java:214)
五月四日至22日:41:40.211:E / AndroidRuntime(1262):在org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:137)
五月四日至22日:41:40.211:E / AndroidRuntime(1262):在org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164)
五月四日至22日:41:40.211:E / AndroidRuntime(1262):在org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119)
五月四日至22日:41:40.211:E / AndroidRuntime(1262):在org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:360)
五月四日至22日:41:40.211:E / AndroidRuntime(1262):在org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
五月四日至22日:41:40.211:E / AndroidRuntime(1262):在org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
五月四日至22日:41:40.211:E / AndroidRuntime(1262):在org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)
五月四日至22日:41:40.211:E / AndroidRuntime(1262):在mygp.gptrade.JSONParser2.makeHtt prequest(JSONParser2.java:62)
五月四日至22日:41:40.211:E / AndroidRuntime(1262):在mygp.gptrade.EditProductActivity $ GetProductDetails $ 1.run(EditProductActivity.java:131)
五月四日至22日:41:40.211:E / AndroidRuntime(1262):在android.os.Handler.handleCallback(Handler.java:733)
五月四日至22日:41:40.211:E / AndroidRuntime(1262):在android.os.Handler.dispatchMessage(Handler.java:95)
五月四日至22日:41:40.211:E / AndroidRuntime(1262):在android.os.Looper.loop(Looper.java:136)
五月四日至22日:41:40.211:E / AndroidRuntime(1262):在android.app.ActivityThread.main(ActivityThread.java:5017)
五月四日至22日:41:40.211:E / AndroidRuntime(1262):在java.lang.reflect.Method.invokeNative(本机方法)
五月四日至22日:41:40.211:E / AndroidRuntime(1262):在java.lang.reflect.Method.invoke(Method.java:515)
五月四日至22日:41:40.211:E / AndroidRuntime(1262):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:779)
五月四日至22日:41:40.211:E / AndroidRuntime(1262):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
五月四日至22日:41:40.211:E / AndroidRuntime(1262):在dalvik.system.NativeStart.main(本机方法)
五月四日至22日:41:47.031:I /流程(1262):发送信号。 PID:1262 SIG:9
你为什么要这么做 runOnUiThread
在 doInBackground
GetProductDetails的方法
。该方法是专门有做长期运行的操作关闭主UI线程。如果您想更新UI,然后做在 onPostExecute
请以下更改
/ **
*背景异步任务以获得完整的产品细节
* /
类GetProductDetails扩展的AsyncTask<字符串,字符串,字符串> {
JSONObject的JSON = NULL; / **
*启动后台线程显示进度对话框之前
* /
@覆盖
在preExecute保护无效(){
super.on preExecute();
pDialog =新ProgressDialog(EditProductActivity.this);
pDialog.setMessage(装载产品的详细信息,请稍候...);
pDialog.setIndeterminate(假);
pDialog.setCancelable(真);
pDialog.show();
} / **
*获取产品的详细信息在后台线程
* /
保护字符串doInBackground(字符串... PARAMS){ //检查成功标记
诠释成功;
尝试{
//大厦参数
清单<&的NameValuePair GT; PARAMS =新的ArrayList<&的NameValuePair GT;();
params.add(新BasicNameValuePair(PID,PID)); //通过HTTP请求获得产品的详细信息
//注意产品的详细信息URL会使用GET请求
JSON = jsonParser2.makeHtt prequest(
url_product_detials,GET,则params); //检查你的日志,JSON响应
Log.d(单一产品详细信息,json.toString()); }赶上(JSONException E){
e.printStackTrace();
} 返回null;
} / **
*在完成后台任务之后辞退进度对话框
** /
保护无效onPostExecute(字符串FILE_URL){
//关闭该对话框一旦得了所有细节
pDialog.dismiss(); 如果(JSON!= NULL){
// JSON的成功标签
成功= json.getInt(TAG_SUCCESS);
如果(成功== 1){
//成功接收产品的详细信息
JSONArray productObj = JSON
.getJSONArray(TAG_PRODUCT); // JSON数组 //从JSON数组的第一个产品对象
的JSONObject产物= productObj.getJSONObject(0); //与本产品的PID发现
//编辑文本
txtName的=(的EditText)findViewById(R.id.inputName);
txtPrice =(EditText上)findViewById(R.id.inputPrice);
txtDesc =(EditText上)findViewById(R.id.inputDesc); //在显示的EditText产品数据
txtName.setText(product.getString(TAG_NAME));
txtPrice.setText(product.getString(TAG_PRICE));
txtDesc.setText(product.getString(TAG_DESCRIPTION)); }其他{
//产品具有pid未找到
}
} }
}
i have a listView of item in a fragment. when i click one of the item, it will open another activity and show the details of the item. but when the progress bar is loading then the whole app crashed.
EditProductActivity.java
public class EditProductActivity extends Activity {
EditText txtName;
EditText txtPrice;
EditText txtDesc;
EditText txtCreatedAt;
Button btnSave;
Button btnDelete;
String pid;
// Progress Dialog
private ProgressDialog pDialog;
// JSON parser class
JSONParser2 jsonParser2 = new JSONParser2();
// single product url
private static final String url_product_detials = "http://gemini888.tk/android_connect/get_product_details.php";
// url to update product
private static final String url_update_product = "http://gemini888.tk/android_connect/update_product.php";
// url to delete product
private static final String url_delete_product = "http://gemini888.tk/android_connect/delete_product.php";
// JSON Node names
private static final String TAG_SUCCESS = "success";
private static final String TAG_PRODUCT = "product";
private static final String TAG_PID = "pid";
private static final String TAG_NAME = "name";
private static final String TAG_PRICE = "price";
private static final String TAG_DESCRIPTION = "description";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.edit_product);
// save button
btnSave = (Button) findViewById(R.id.btnSave);
btnDelete = (Button) findViewById(R.id.btnDelete);
// getting product details from intent
Intent i = getIntent();
// getting product id (pid) from intent
pid = i.getStringExtra(TAG_PID);
// Getting complete product details in background thread
new GetProductDetails().execute();
// save button click event
btnSave.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
// starting background task to update product
new SaveProductDetails().execute();
}
});
// Delete button click event
btnDelete.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
// deleting product in background thread
new DeleteProduct().execute();
}
});
}
/**
* Background Async Task to Get complete product details
* */
class GetProductDetails extends AsyncTask<String, String, String> {
/**
* Before starting background thread Show Progress Dialog
* */
@Override
protected void onPreExecute() {
super.onPreExecute();
pDialog = new ProgressDialog(EditProductActivity.this);
pDialog.setMessage("Loading product details. Please wait...");
pDialog.setIndeterminate(false);
pDialog.setCancelable(true);
pDialog.show();
}
/**
* Getting product details in background thread
* */
protected String doInBackground(String... params) {
// updating UI from Background Thread
runOnUiThread(new Runnable() {
public void run() {
// Check for success tag
int success;
try {
// Building Parameters
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("pid", pid));
// getting product details by making HTTP request
// Note that product details url will use GET request
JSONObject json = jsonParser2.makeHttpRequest(
url_product_detials, "GET", params);
// check your log for json response
Log.d("Single Product Details", json.toString());
// json success tag
success = json.getInt(TAG_SUCCESS);
if (success == 1) {
// successfully received product details
JSONArray productObj = json
.getJSONArray(TAG_PRODUCT); // JSON Array
// get first product object from JSON Array
JSONObject product = productObj.getJSONObject(0);
// product with this pid found
// Edit Text
txtName = (EditText) findViewById(R.id.inputName);
txtPrice = (EditText) findViewById(R.id.inputPrice);
txtDesc = (EditText) findViewById(R.id.inputDesc);
// display product data in EditText
txtName.setText(product.getString(TAG_NAME));
txtPrice.setText(product.getString(TAG_PRICE));
txtDesc.setText(product.getString(TAG_DESCRIPTION));
}else{
// product with pid not found
}
} catch (JSONException e) {
e.printStackTrace();
}
}
});
return null;
}
/**
* After completing background task Dismiss the progress dialog
* **/
protected void onPostExecute(String file_url) {
// dismiss the dialog once got all details
pDialog.dismiss();
}
}
/**
* Background Async Task to Save product Details
* */
class SaveProductDetails extends AsyncTask<String, String, String> {
/**
* Before starting background thread Show Progress Dialog
* */
@Override
protected void onPreExecute() {
super.onPreExecute();
pDialog = new ProgressDialog(EditProductActivity.this);
pDialog.setMessage("Saving product ...");
pDialog.setIndeterminate(false);
pDialog.setCancelable(true);
pDialog.show();
}
/**
* Saving product
* */
protected String doInBackground(String... args) {
// getting updated data from EditTexts
String name = txtName.getText().toString();
String price = txtPrice.getText().toString();
String description = txtDesc.getText().toString();
// Building Parameters
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair(TAG_PID, pid));
params.add(new BasicNameValuePair(TAG_NAME, name));
params.add(new BasicNameValuePair(TAG_PRICE, price));
params.add(new BasicNameValuePair(TAG_DESCRIPTION, description));
// sending modified data through http request
// Notice that update product url accepts POST method
JSONObject json = jsonParser2.makeHttpRequest(url_update_product,
"POST", params);
// check json success tag
try {
int success = json.getInt(TAG_SUCCESS);
if (success == 1) {
// successfully updated
Intent i = getIntent();
// send result code 100 to notify about product update
setResult(100, i);
finish();
} else {
// failed to update product
}
} catch (JSONException e) {
e.printStackTrace();
}
return null;
}
/**
* After completing background task Dismiss the progress dialog
* **/
protected void onPostExecute(String file_url) {
// dismiss the dialog once product uupdated
pDialog.dismiss();
}
}
/*****************************************************************
* Background Async Task to Delete Product
* */
class DeleteProduct extends AsyncTask<String, String, String> {
/**
* Before starting background thread Show Progress Dialog
* */
@Override
protected void onPreExecute() {
super.onPreExecute();
pDialog = new ProgressDialog(EditProductActivity.this);
pDialog.setMessage("Deleting Product...");
pDialog.setIndeterminate(false);
pDialog.setCancelable(true);
pDialog.show();
}
/**
* Deleting product
* */
protected String doInBackground(String... args) {
// Check for success tag
int success;
try {
// Building Parameters
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("pid", pid));
// getting product details by making HTTP request
JSONObject json = jsonParser2.makeHttpRequest(
url_delete_product, "POST", params);
// check your log for json response
Log.d("Delete Product", json.toString());
// json success tag
success = json.getInt(TAG_SUCCESS);
if (success == 1) {
// product successfully deleted
// notify previous activity by sending code 100
Intent i = getIntent();
// send result code 100 to notify about product deletion
setResult(100, i);
finish();
}
} catch (JSONException e) {
e.printStackTrace();
}
return null;
}
/**
* After completing background task Dismiss the progress dialog
* **/
protected void onPostExecute(String file_url) {
// dismiss the dialog once product deleted
pDialog.dismiss();
}
}
}
just made a proper alignment
the logcat:
04-22 05:41:18.881: D/All Products:(1262): {"success":1,"products": [{"created_at":"2015-04-15 21:52:09","pid":"1","updated_at":"0000-00-00 00:00:00","price":"1111.00","description":"good","name":"iphone "},{"created_at":"2015-04-18 02:41:49","pid":"13","updated_at":"0000-00-00 00:00:00","price":"60.00","description":"cheapo","name":"Samsung "},{"created_at":"2015-04-18 03:26:40","pid":"14","updated_at":"0000-00-00 00:00:00","price":"1000.00","description":"bad\n","name":"xiaomi"},{"created_at":"2015-04-21 05:56:55","pid":"15","updated_at":"0000-00-00 00:00:00","price":"500.00","description":"new","name":"Acer "},{"created_at":"2015-04-22 02:58:09","pid":"16","updated_at":"0000-00-00 00:00:00","price":"500.00","description":"??\n\n","name":"??"}]}
04-22 05:41:35.551: D/dalvikvm(1262): GC_FOR_ALLOC freed 253K, 9% free 3667K/3992K, paused 383ms, total 393ms
04-22 05:41:39.991: D/AndroidRuntime(1262): Shutting down VM
04-22 05:41:39.991: W/dalvikvm(1262): threadid=1: thread exiting with uncaught exception (group=0xb2a54ba8)
04-22 05:41:40.211: E/AndroidRuntime(1262): FATAL EXCEPTION: main
04-22 05:41:40.211: E/AndroidRuntime(1262): Process: mygp.gptrade, PID: 1262
04-22 05:41:40.211: E/AndroidRuntime(1262): android.os.NetworkOnMainThreadException
04-22 05:41:40.211: E/AndroidRuntime(1262): at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1145)
04-22 05:41:40.211: E/AndroidRuntime(1262): at java.net.InetAddress.lookupHostByName(InetAddress.java:385)
04-22 05:41:40.211: E/AndroidRuntime(1262): at java.net.InetAddress.getAllByNameImpl(InetAddress.java:236)
04-22 05:41:40.211: E/AndroidRuntime(1262): at java.net.InetAddress.getAllByName(InetAddress.java:214)
04-22 05:41:40.211: E/AndroidRuntime(1262): at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:137)
04-22 05:41:40.211: E/AndroidRuntime(1262): at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164)
04-22 05:41:40.211: E/AndroidRuntime(1262): at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119)
04-22 05:41:40.211: E/AndroidRuntime(1262): at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:360)
04-22 05:41:40.211: E/AndroidRuntime(1262): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
04-22 05:41:40.211: E/AndroidRuntime(1262): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
04-22 05:41:40.211: E/AndroidRuntime(1262): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)
04-22 05:41:40.211: E/AndroidRuntime(1262): at mygp.gptrade.JSONParser2.makeHttpRequest(JSONParser2.java:62)
04-22 05:41:40.211: E/AndroidRuntime(1262): at mygp.gptrade.EditProductActivity$GetProductDetails$1.run(EditProductActivity.java:131)
04-22 05:41:40.211: E/AndroidRuntime(1262): at android.os.Handler.handleCallback(Handler.java:733)
04-22 05:41:40.211: E/AndroidRuntime(1262): at android.os.Handler.dispatchMessage(Handler.java:95)
04-22 05:41:40.211: E/AndroidRuntime(1262): at android.os.Looper.loop(Looper.java:136)
04-22 05:41:40.211: E/AndroidRuntime(1262): at android.app.ActivityThread.main(ActivityThread.java:5017)
04-22 05:41:40.211: E/AndroidRuntime(1262): at java.lang.reflect.Method.invokeNative(Native Method)
04-22 05:41:40.211: E/AndroidRuntime(1262): at java.lang.reflect.Method.invoke(Method.java:515)
04-22 05:41:40.211: E/AndroidRuntime(1262): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
04-22 05:41:40.211: E/AndroidRuntime(1262): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
04-22 05:41:40.211: E/AndroidRuntime(1262): at dalvik.system.NativeStart.main(Native Method)
04-22 05:41:47.031: I/Process(1262): Sending signal. PID: 1262 SIG: 9
Why are you doing runOnUiThread
in the doInBackground
method of GetProductDetails
. The method is specifically there to do long running operation off the main UI thread. If you want to update the UI then do it in onPostExecute
Make the following change
/**
* Background Async Task to Get complete product details
*/
class GetProductDetails extends AsyncTask<String, String, String> {
JSONObject json = null;
/**
* Before starting background thread Show Progress Dialog
*/
@Override
protected void onPreExecute() {
super.onPreExecute();
pDialog = new ProgressDialog(EditProductActivity.this);
pDialog.setMessage("Loading product details. Please wait...");
pDialog.setIndeterminate(false);
pDialog.setCancelable(true);
pDialog.show();
}
/**
* Getting product details in background thread
*/
protected String doInBackground(String... params) {
// Check for success tag
int success;
try {
// Building Parameters
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("pid", pid));
// getting product details by making HTTP request
// Note that product details url will use GET request
json = jsonParser2.makeHttpRequest(
url_product_detials, "GET", params);
// check your log for json response
Log.d("Single Product Details", json.toString());
} catch (JSONException e) {
e.printStackTrace();
}
return null;
}
/**
* After completing background task Dismiss the progress dialog
**/
protected void onPostExecute(String file_url) {
// dismiss the dialog once got all details
pDialog.dismiss();
if (json != null) {
// json success tag
success = json.getInt(TAG_SUCCESS);
if (success == 1) {
// successfully received product details
JSONArray productObj = json
.getJSONArray(TAG_PRODUCT); // JSON Array
// get first product object from JSON Array
JSONObject product = productObj.getJSONObject(0);
// product with this pid found
// Edit Text
txtName = (EditText) findViewById(R.id.inputName);
txtPrice = (EditText) findViewById(R.id.inputPrice);
txtDesc = (EditText) findViewById(R.id.inputDesc);
// display product data in EditText
txtName.setText(product.getString(TAG_NAME));
txtPrice.setText(product.getString(TAG_PRICE));
txtDesc.setText(product.getString(TAG_DESCRIPTION));
} else {
// product with pid not found
}
}
}
}
这篇关于从片段活动onItemClicked的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!