Android从MySql表中获取数据

我正在开发一个Android应用程序…我在MySql中开发了一个表,并且表中的值为1-10的某些结果,并且所有值都是单独输入的…

在我的Android应用程序中,当显示一个特定的值时,该值的结果必须从表中获取…但它无法正常工作…消息变得像’不幸的应用程序已关闭’…我正在添加我的代码在这里…请检查代码,如果发现任何错误请帮助…..

Activity.java

public class FirstResult extends Activity { String pid; TextView txtName; // Progress Dialog private ProgressDialog pDialog; // JSON parser class JSONParser jsonParser = new JSONParser(); // single product url private static final String url_product_detials = "http://iascpl.com/app/get_product_details.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_NUMBER = "number"; //private static final String TAG_PRICE = "price"; private static final String TAG_DESCRIPTION = "description"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.firstresult_xm); TextView txt1 = (TextView) findViewById (R.id.textView2); txt1.setText(getIntent().getStringExtra("name10")); pid = txt1.getText().toString(); new GetProductDetails().execute(); } /** * Background Async Task to Get complete product details * */ class GetProductDetails extends AsyncTask { /** * Before starting background thread Show Progress Dialog * */ @Override protected void onPreExecute() { super.onPreExecute(); pDialog = new ProgressDialog(FirstResult.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 params = new ArrayList(); params.add(new BasicNameValuePair("pid", pid)); // getting product details by making HTTP request // Note that product details url will use GET request JSONObject json = jsonParser.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 = (TextView) findViewById(R.id.textView3); // display product data in EditText txtName.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(); } } } 

php文件

  0) { $result = mysql_fetch_array($result); $product = array(); $product["pid"] = $result["pid"]; $product["number"] = $result["number"]; // $product["price"] = $result["price"]; $product["description"] = $result["description"]; $product["created_at"] = $result["created_at"]; $product["updated_at"] = $result["updated_at"]; // success $response["success"] = 1; // user node $response["product"] = array(); array_push($response["product"], $product); // echoing JSON response echo json_encode($response); } else { // no product found $response["success"] = 0; $response["message"] = "No product found"; // echo no users JSON echo json_encode($response); } } else { // no product found $response["success"] = 0; $response["message"] = "No product found"; // echo no users JSON echo json_encode($response); } } else { // required field is missing $response["success"] = 0; $response["message"] = "Required field(s) is missing"; 

我的Logcat

 11-05 11:44:12.701: E/AndroidRuntime(7643): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555) 11-05 11:44:12.701: E/AndroidRuntime(7643): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487) 11-05 11:44:12.701: E/AndroidRuntime(7643): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465) 11-05 11:44:12.701: E/AndroidRuntime(7643): at com.example.numero.JSONParser.makeHttpRequest(JSONParser.java:63) 11-05 11:44:12.701: E/AndroidRuntime(7643): at com.example.numero.FirstResult$GetProductDetails$1.run(FirstResult.java:105) 11-05 11:44:12.701: E/AndroidRuntime(7643): at android.os.Handler.handleCallback(Handler.java:725) 11-05 11:44:12.701: E/AndroidRuntime(7643): at android.os.Handler.dispatchMessage(Handler.java:92) 11-05 11:44:12.701: E/AndroidRuntime(7643): at android.os.Looper.loop(Looper.java:137) 11-05 11:44:12.701: E/AndroidRuntime(7643): at android.app.ActivityThread.main(ActivityThread.java:5041) 11-05 11:44:12.701: E/AndroidRuntime(7643): at java.lang.reflect.Method.invokeNative(Native Method) 11-05 11:44:12.701: E/AndroidRuntime(7643): at java.lang.reflect.Method.invoke(Method.java:511) 11-05 11:44:12.701: E/AndroidRuntime(7643): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 11-05 11:44:12.701: E/AndroidRuntime(7643): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 11-05 11:44:12.701: E/AndroidRuntime(7643): at dalvik.system.NativeStart.main(Native Method) 11-05 11:52:08.052: E/Trace(7805): error opening trace file: No such file or directory (2) 11-05 11:56:14.171: E/AndroidRuntime(7805): FATAL EXCEPTION: main 11-05 11:56:14.171: E/AndroidRuntime(7805): android.os.NetworkOnMainThreadException 11-05 11:56:14.171: E/AndroidRuntime(7805): at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1117) 11-05 11:56:14.171: E/AndroidRuntime(7805): at java.net.InetAddress.lookupHostByName(InetAddress.java:385) 11-05 11:56:14.171: E/AndroidRuntime(7805): at java.net.InetAddress.getAllByNameImpl(InetAddress.java:236) 11-05 11:56:14.171: E/AndroidRuntime(7805): at java.net.InetAddress.getAllByName(InetAddress.java:214) 11-05 11:56:14.171: E/AndroidRuntime(7805): at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:137) 11-05 11:56:14.171: E/AndroidRuntime(7805): at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164) 11-05 11:56:14.171: E/AndroidRuntime(7805): at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119) 11-05 11:56:14.171: E/AndroidRuntime(7805): at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:360) 11-05 11:56:14.171: E/AndroidRuntime(7805): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555) 11-05 11:56:14.171: E/AndroidRuntime(7805): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487) 11-05 11:56:14.171: E/AndroidRuntime(7805): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465) 11-05 11:56:14.171: E/AndroidRuntime(7805): at com.example.numero.JSONParser.makeHttpRequest(JSONParser.java:63) 11-05 11:56:14.171: E/AndroidRuntime(7805): at com.example.numero.FirstResult$GetProductDetails$1.run(FirstResult.java:105) 11-05 11:56:14.171: E/AndroidRuntime(7805): at android.os.Handler.handleCallback(Handler.java:725) 11-05 11:56:14.171: E/AndroidRuntime(7805): at android.os.Handler.dispatchMessage(Handler.java:92) 11-05 11:56:14.171: E/AndroidRuntime(7805): at android.os.Looper.loop(Looper.java:137) 11-05 11:56:14.171: E/AndroidRuntime(7805): at android.app.ActivityThread.main(ActivityThread.java:5041) 11-05 11:56:14.171: E/AndroidRuntime(7805): at java.lang.reflect.Method.invokeNative(Native Method) 11-05 11:56:14.171: E/AndroidRuntime(7805): at java.lang.reflect.Method.invoke(Method.java:511) 11-05 11:56:14.171: E/AndroidRuntime(7805): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 11-05 11:56:14.171: E/AndroidRuntime(7805): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 11-05 11:56:14.171: E/AndroidRuntime(7805): at dalvik.system.NativeStart.main(Native Method) 11-05 11:56:25.961: E/Trace(7893): error opening trace file: No such file or directory (2) 

 runOnUiThread(new Runnable() { @Override public void run() { // TODO Auto-generated method stub try { txt3.setText(product.getString(TAG_DESCRIPTION)); } catch (JSONException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }); }else{ // product with pid not found } 

之后添加此行

 / get first product object from JSON Array JSONObject product = productObj.getJSONObject(0); // product with this pid found // Edit Text txtName = (TextView) findViewById(R.id.textView3); 

这将解决问题

您需要发布问题的堆栈跟踪。 您将在logcat视图中找到它。 另外,在旁注上:

runOnUiThread(new Runnable(){public void run(){

这在这个地方根本没有任何意义,因为你基本上运行一个后台线程,然后你同步它并在主线程上运行它。 根据您的设置,这将无效,因为Android不允许在主/ UI线程上进行网络操作。

添加LogCat后编辑:

这正是我提到的。 Android不允许您在UI线程上运行网络流量。 从runOnBackground中删除runOnUiThread的东西。 现在要设置数据,您可以将两件事中的两件之一:

  1. 添加设置textView的runOnUiThread部分。 就像是:

     runOnUiThread(new Runnable() { public void run() { TextView tv = findViewById... tv.setText(... } } 
  2. 返回您需要的对象。 这实际上是AsyncTask应该如何工作的:在你的AsyncTask的runOnBackground中,你会做:

     return product.getString(TAG_DESCRIPTION) 

然后,在onPostExecute中,您获取该String并将其设置为TextViews。