2012-09-22 14 views
-1

我尝试以检索信息表数据库(MySQL的)的列表视图,那就是做工精细 ,但如果我上项目单击列表上显示inforamtion 它显示在logcat的错误数据

这个问题
09-20 21:40:12.125: E/AndroidRuntime(5003): FATAL EXCEPTION: main 
09-20 21:40:12.125: E/AndroidRuntime(5003): android.os.NetworkOnMainThreadException 
09-20 21:40:12.125: E/AndroidRuntime(5003):  at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1084) 
09-20 21:40:12.125: E/AndroidRuntime(5003):  at libcore.io.BlockGuardOs.connect(BlockGuardOs.java:74) 
09-20 21:40:12.125: E/AndroidRuntime(5003):  at libcore.io.IoBridge.connectErrno(IoBridge.java:127) 
09-20 21:40:12.125: E/AndroidRuntime(5003):  at libcore.io.IoBridge.connect(IoBridge.java:112) 
09-20 21:40:12.125: E/AndroidRuntime(5003):  at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:192) 
09-20 21:40:12.125: E/AndroidRuntime(5003):  at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:459) 
09-20 21:40:12.125: E/AndroidRuntime(5003):  at java.net.Socket.connect(Socket.java:842) 
09-20 21:40:12.125: E/AndroidRuntime(5003):  at org.apache.http.conn.scheme.PlainSocketFactory.connectSocket(PlainSocketFactory.java:119) 
09-20 21:40:12.125: E/AndroidRuntime(5003):  at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:144) 
09-20 21:40:12.125: E/AndroidRuntime(5003):  at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164) 
09-20 21:40:12.125: E/AndroidRuntime(5003):  at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119) 
09-20 21:40:12.125: E/AndroidRuntime(5003):  at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:360) 
09-20 21:40:12.125: E/AndroidRuntime(5003):  at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555) 
09-20 21:40:12.125: E/AndroidRuntime(5003):  at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487) 
09-20 21:40:12.125: E/AndroidRuntime(5003):  at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465) 
09-20 21:40:12.125: E/AndroidRuntime(5003):  at com.ksu.sms.JSONParser.makeHttpRequest(JSONParser.java:62) 
09-20 21:40:12.125: E/AndroidRuntime(5003):  at com.ksu.sms.ViewCourseStudent$GetCourseDetails$1.run(ViewCourseStudent.java:91) 
09-20 21:40:12.125: E/AndroidRuntime(5003):  at android.os.Handler.handleCallback(Handler.java:605) 
09-20 21:40:12.125: E/AndroidRuntime(5003):  at android.os.Handler.dispatchMessage(Handler.java:92) 
09-20 21:40:12.125: E/AndroidRuntime(5003):  at android.os.Looper.loop(Looper.java:137) 
09-20 21:40:12.125: E/AndroidRuntime(5003):  at android.app.ActivityThread.main(ActivityThread.java:4340) 
09-20 21:40:12.125: E/AndroidRuntime(5003):  at java.lang.reflect.Method.invokeNative(Native Method) 
09-20 21:40:12.125: E/AndroidRuntime(5003):  at java.lang.reflect.Method.invoke(Method.java:511) 
09-20 21:40:12.125: E/AndroidRuntime(5003):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 
09-20 21:40:12.125: E/AndroidRuntime(5003):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 
09-20 21:40:12.125: E/AndroidRuntime(5003):  at dalvik.system.NativeStart.main(Native Method) 

,这是我的代码以检索整个信息 而显示为列表

package com.ksu.sms; 


import java.util.ArrayList; 
import java.util.HashMap; 
import java.util.List; 

import org.apache.http.NameValuePair; 
import org.json.JSONArray; 
import org.json.JSONException; 
import org.json.JSONObject; 

import android.app.ListActivity; 
import android.app.ProgressDialog; 
import android.content.Intent; 
import android.os.AsyncTask; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.View; 
import android.widget.AdapterView; 
import android.widget.AdapterView.OnItemClickListener; 
import android.widget.ListAdapter; 
import android.widget.ListView; 
import android.widget.SimpleAdapter; 
import android.widget.TextView; 
import android.widget.Toast; 



public class ViewALLCourseStudent extends ListActivity { 

    // Progress Dialog 
    private ProgressDialog pDialog; 

    // Creating JSON Parser object 
    JSONParser jParser = new JSONParser(); //class 

    ArrayList<HashMap<String, String>> coursesList; 

    //url to get all products list 
    private static String url_all_course = "http://10.0.2.2/SmsPhp/view_all_course.php"; 
    // JSON Node names 
    private static final String TAG_SUCCESS = "success"; 
    private static final String TAG_course = "course"; 
    private static final String TAG_CourseID = "CourseID"; 
    private static final String TAG_Name = "Name"; 

    // course JSONArray 
    JSONArray courses = null; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.view_all_course_student); 


     coursesList = new ArrayList<HashMap<String, String>>(); 

     // Loading courses in Background Thread 
     new LoadAllCourses().execute(); 

     // Get list view 
     ListView lv = getListView(); 
    // on seleting single course 
     // launching Edit course Screen 
     lv.setOnItemClickListener(new OnItemClickListener() { 

      public void onItemClick(AdapterView<?> parent, View view, 
        int position, long id) //one of the list 
      { 
       // getting values from selected ListItem 
       String CourseID = ((TextView) view.findViewById(R.id.CourseID)).getText() 
         .toString(); 
       // Starting new intent 
       Intent ViewCourseStudent = new Intent(getApplicationContext(), 
         ViewCourseStudent.class); 
       // sending Course ID to next activity 
       ViewCourseStudent.putExtra(TAG_CourseID, CourseID); 

       // starting new activity and expecting some response back 
       startActivityForResult(ViewCourseStudent, 100); 
      } 
     }); 

    } 
// Response from view course Activity 

    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) 
    { 
     super.onActivityResult(requestCode, resultCode, data); 
     // if result code 100 
     if (resultCode == 100) { 
      // if result code 100 is received 
      // means user view course 
      // reload this screen again 
      Intent intent = getIntent(); 
      finish(); 
      startActivity(intent); 
     } 

} 
    /** 
    * Background Async Task to Load all course by making HTTP Request 
    * */ 
    class LoadAllCourses extends AsyncTask<String, String, String> 
    { 

     /** 
     * Before starting background thread Show Progress Dialog 
     * */ 
     @Override 
     protected void onPreExecute() { 
      super.onPreExecute(); 
      pDialog = new ProgressDialog(ViewALLCourseStudent.this); 
      pDialog.setMessage("Loading Courses. Please wait..."); 
      pDialog.setIndeterminate(false); 
      pDialog.setCancelable(false); 
      pDialog.show(); 
     } 
     /** 
     * getting All products from u r l 
     * */ 
     @Override 
     protected String doInBackground(String... args) { 
      // Building Parameters 
      List<NameValuePair> params = new ArrayList<NameValuePair>(); 
      // getting JSON string from URL 
      JSONObject json = jParser.makeHttpRequest(url_all_course, "GET", params); 

      // Check your log cat for JSON response 
      Log.d("All courses: ", json.toString()); 

      try { 
       // Checking for SUCCESS TAG 
       int success = json.getInt(TAG_SUCCESS); 

       if (success == 1) { 
        // course found 
        // Getting Array of course 
        courses = json.getJSONArray(TAG_course); 

        // looping through All courses 
        for (int i = 0; i < courses.length(); i++)//course JSONArray 
        { 
         JSONObject c = courses.getJSONObject(i); // read first 

         // Storing each json item in variable 
         String CourseID = c.getString(TAG_CourseID); 
         String Name = c.getString(TAG_Name); 

         // creating new HashMap 
         HashMap<String, String> map = new HashMap<String, String>(); 

         // adding each child node to HashMap key => value 
         map.put(TAG_CourseID, CourseID); 
         map.put(TAG_Name, Name); 

         // adding HashList to ArrayList 
         coursesList.add(map); 
        } 
       } else { 
        Toast.makeText(getBaseContext(),"there is no course" ,Toast.LENGTH_LONG).show(); 
       } 

      } catch (JSONException e) { 
       e.printStackTrace(); 
      } 

      return null; 
     } 

     /** 
     * After completing background task Dismiss the progress dialog 
     * **/ 
     protected void onPostExecute(String file_url) { 
       // dismiss the dialog after getting all products 
       pDialog.dismiss(); 

       /** 
       * Updating parsed JSON data into ListView 
       **/ 
       ListAdapter adapter = new SimpleAdapter( 
           ViewALLCourseStudent.this, coursesList, 
           R.layout.list_item, new String[] { TAG_CourseID, 
             TAG_Name}, 
           new int[] { R.id.CourseID, R.id.Name }); 
       // updating listview 
       setListAdapter(adapter); 
     } 


    } 
} 

最后,如果数据库是空的也是它显示的logcat

0这个问题
09-20 22:07:20.665: E/AndroidRuntime(5260): FATAL EXCEPTION: AsyncTask #1 
09-20 22:07:20.665: E/AndroidRuntime(5260): java.lang.RuntimeException: An error occured while executing doInBackground() 

thansk这么多的时间来阅读我的问题

+0

你有没有在AndroidManifest.xml中提供Internet权限? – Lucifer

+0

@lucifer yes <! - Internet权限 - > <使用权限android:name =“android.permission.INTERNET”/>应用程序之前这个问题android.os.NetworkOnMainThreadException它已经不存在如果我改变了android: targetSdkVersion =“14”到android:targetSdkVersion =“8”但我没有,如果有我的方式我可以修复它,但最重要的是方式的致命例外:主要 如果我点击一个项目列表 – user1682578

回答

0

你为什么会在的AsyncTask的后台线程使用runOnUiThread()?使用它的全部要点是使该操作在后台线程上运行。

无论哪种方式,有两件事你可以做,以解决这个问题。

  1. 让您的应用建立一个可以比蜂窝低的API:

    <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="9" />

  2. 取出的AsyncTask的runOnUiThread()部分,并在后台线程代码的运行。

+0

使代码runOnUiThread()方法在runOnUiThread()之外运行。 –

+0

@覆盖 保护字符串doInBackground(字符串... arg0中)从后台线程 runOnUiThread(新的Runnable(){{ –

+0

// 更新UI你必须将所有的TextView更新代码onPostExecute()为好。 –

0

这个问题有两种解决方法。

1)不要在主UI线程中使用异步任务编写网络调用。

2)在setContentView(R.layout.activity_main)之后将代码写入MainActivity文件中;

if (android.os.Build.VERSION.SDK_INT > 9) { 
    StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); 
    StrictMode.setThreadPolicy(policy); 
} 
+0

这将解决whic问题 – user1682578

+0

@ user1688325这将解决“NetworkOnMainThreadException”的问题。 –

+0

所以我不需要更改sdk表格14到8知道正确的 – user1682578