从数据库中读取数据

时间:2012-09-25 19:29:31

标签: java android mysql json

我需要从mysql数据库中检索信息作为视图列表,这在我的文件中正确完成 应用程序但问题是如果我点击列表项目来显示它的信息 它在我的logcat

中出现了这个问题
   09-21 01:39:58.915: E/AndroidRuntime(6968): FATAL EXCEPTION: main
    09-21 01:39:58.915: E/AndroidRuntime(6968): java.lang.NullPointerException
    09-21 01:39:58.915: E/AndroidRuntime(6968):     at com.ksu.sms.ViewCourseStudent$GetCourseDetails.onPostExecute(ViewCourseStudent.java:142)
    09-21 01:39:58.915: E/AndroidRuntime(6968):     at com.ksu.sms.ViewCourseStudent$GetCourseDetails.onPostExecute(ViewCourseStudent.java:1)
    09-21 01:39:58.915: E/AndroidRuntime(6968):     at android.os.AsyncTask.finish(AsyncTask.java:602)
    09-21 01:39:58.915: E/AndroidRuntime(6968):     at android.os.AsyncTask.access$600(AsyncTask.java:156)
    09-21 01:39:58.915: E/AndroidRuntime(6968):     at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:615)
    09-21 01:39:58.915: E/AndroidRuntime(6968):     at android.os.Handler.dispatchMessage(Handler.java:99)
    09-21 01:39:58.915: E/AndroidRuntime(6968):     at android.os.Looper.loop(Looper.java:137)
    09-21 01:39:58.915: E/AndroidRuntime(6968):     at android.app.ActivityThread.main(ActivityThread.java:4340)
    09-21 01:39:58.915: E/AndroidRuntime(6968):     at java.lang.reflect.Method.invokeNative(Native Method)
    09-21 01:39:58.915: E/AndroidRuntime(6968):     at java.lang.reflect.Method.invoke(Method.java:511)
    09-21 01:39:58.915: E/AndroidRuntime(6968):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
    09-21 01:39:58.915: E/AndroidRuntime(6968):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
    09-21 01:39:58.915: E/AndroidRuntime(6968):     at dalvik.system.NativeStart.main(Native Method)

class viewcoursestudent.java

package com.ksu.sms;

import android.app.Activity; 
import java.util.ArrayList; 
import java.util.List; 

import org.apache.http.NameValuePair; 
import org.apache.http.message.BasicNameValuePair; 
import org.json.JSONArray; 
import org.json.JSONException; 
import org.json.JSONObject; 
import android.app.ProgressDialog; 
import android.content.Intent; 
import android.os.AsyncTask; 
import android.os.Bundle; 
import android.util.Log; 
import android.widget.TextView; 


public class ViewCourseStudent extends Activity { 
    TextView Name; TextView Description; 
    TextView OfficeHours; 
    TextView CreditHours; 
    TextView MaxAbsenceDays; 
    TextView ExamsDates ; 

        String CourseID ; 
        // Progress Dialog 
        private ProgressDialog pDialog; 

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

        // single course url 
        private static final String url_course_detials = "http://10.0.2.2/SmsPhp/view_course.php"; 
        //JSON Node names 
        private static final String TAG_SUCCESS = "success"; 
        private static final String TAG_CourseID = "CourseID"; 
        private static final String TAG_course = "course"; 
        private static final String TAG_Name = "Name"; 
        private static final String TAG_OfficeHours = "OfficeHours"; 
        private static final String TAG_CreditHours = "CreditHours"; 
        private static final String TAG_Description = "Description"; 
        private static final String TAG_MaxAbsenceDays = "MaxAbsenceDays"; 
        private static final String TAG_ExamsDates = "ExamsDates"; 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.view_course); 

        Intent i = getIntent(); 
         CourseID = i.getStringExtra(TAG_CourseID); 
         // Getting complete course details in background thread 
         new GetCourseDetails().execute(); 

    } 

    /** 
     * Background Async Task to Get complete course details 
     * */ 
    class GetCourseDetails extends AsyncTask<String, String, String> { 

        private JSONObject  course; 

        /** 
         * Before starting background thread Show Progress Dialog 
         * */ 
        @Override 
        protected void onPreExecute() { 
            super.onPreExecute(); 
            pDialog = new ProgressDialog(ViewCourseStudent.this); 
            pDialog.setMessage("Loading course details. Please wait..."); 
            pDialog.setIndeterminate(false); 
            pDialog.setCancelable(true); 
            pDialog.show(); 
        } 


    @Override 
    protected String doInBackground(String... arg0) { 
        // updating UI from Background Thread 
                // Check for success tag 
                int success; 
                try { 
                    // Building Parameters 
                    List<NameValuePair> params = new ArrayList<NameValuePair>(); 
                    params.add(new BasicNameValuePair("CourseID", CourseID)); 

                    // getting course details by making HTTP request 
                    // Note that product details url will use GET request 
                    JSONObject json = jsonParser.makeHttpRequest( 
                            url_course_detials, "GET", params); 

                    // check your log for json response 
                    Log.d("Single course Details", json.toString()); 

                    // json success tag 
                    success = json.getInt(TAG_SUCCESS); 
                    if (success == 1) { 
                        // successfully received product details 
                        JSONArray courseObj = json 
                                .getJSONArray(TAG_course); // JSON Array 

                        // get first course object from JSON Array 
                          course = courseObj.getJSONObject(0); 




                    }else{ 
                        // course with course id not found 
                        course = null; 
                    } 
                } 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(course != null){ 
            try
            {
             Name = (TextView) findViewById(R.id.C_Name); 
             Description = (TextView) findViewById(R.id.C_Des); 
             CreditHours = (TextView) findViewById(R.id.C_Hours); 
             OfficeHours=(TextView) findViewById(R.id.C_Ohour); 
             MaxAbsenceDays=(TextView) findViewById(R.id.C_absence); 
             ExamsDates=(TextView) findViewById(R.id.Add_C_Exam); 
             // display product data in EditText 
             Name.setText( course.getString(TAG_Name)); 
             Description.setText( course.getString(TAG_Description)); 
             OfficeHours.setText( course.getString(TAG_OfficeHours)); 
             MaxAbsenceDays.setText( course.getString(TAG_MaxAbsenceDays)); 
             ExamsDates.setText( course.getString(TAG_ExamsDates)); 
             CreditHours.setText( course.getString(TAG_CreditHours)); 
        }
            catch (JSONException e) { 
                e.printStackTrace(); 
            } 
        }
    } 
} 
} 

如果你需要任何解释我可以做的事情 非常感谢

1 个答案:

答案 0 :(得分:1)

CreditHours.setText( course.getString(TAG_CreditHours)); 

导致NullPointerException。 CreditHours可能为空。检查它是否在您的视图中。

PS:阅读Java代码约定here