2014-01-05 29 views
0

我的應用程序要求頁面中的數據傳遞到另一個頁面,但顯然數據不通過,我不確定是否有錯誤。以下是警告代碼和錯誤代碼。未從上一頁檢索的數據,從意圖傳遞

W/System.err(18031): org.json.JSONException: No value for employ 
W/System.err(18031): at org.json.JSONObject.get(JSONObject.java:354) 
W/System.err(18031): at org.json.JSONObject.getJSONArray(JSONObject.java:548) 
W/System.err(18031): at com.example.splashscreentwo.EmployeePayslip$GetEmployeeDetails.doInBackground(EmployeePayslip.java:138) 
W/System.err(18031): at com.example.splashscreentwo.EmployeePayslip$GetEmployeeDetails.doInBackground(EmployeePayslip.java:1) 
W/System.err(18031): at android.os.AsyncTask$2.call(AsyncTask.java:287) 
W/System.err(18031): at java.util.concurrent.FutureTask.run(FutureTask.java:234) 
W/System.err(18031): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230) 
W/System.err(18031): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080) 
W/System.err(18031): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573) 
W/System.err(18031): at java.lang.Thread.run(Thread.java:841) 
E/ViewRootImpl(18031): sendUserActionEvent() mView == null 

這是java類的代碼。

package com.example.splashscreentwo; 

import java.util.ArrayList; 
import java.util.HashMap; 
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.Activity; 
import android.app.ProgressDialog; 
import android.content.Intent; 
import android.net.Uri; 
import android.os.AsyncTask; 
import android.os.Bundle; 
import android.telephony.SmsManager; 
import android.util.Log; 
import android.view.View; 
import android.widget.Button; 
import android.widget.ImageButton; 
import android.widget.TextView; 
import android.widget.Toast; 

public class EmployeePayslip extends Activity { 

    private ProgressDialog pDialog; 
    String pid; 
    TextView employeeName; 
    TextView Desc; 
    TextView txtCreatedAt; 

    // Creating JSON Parser object 
    JSONParser jParser = new JSONParser(); 
    JSONArray payslip = null; 
    ArrayList<HashMap<String, String>> payslipList; 

    // url to get all fulltime employees list 
    private static String url_payslip = "http://rollit.sg/FYP/ExportPayslip.php"; 
    private static String url_employees = "http://rollit.sg/FYP/Existing_employees_FullTime.php"; 

    private static final String TAG_SUCCESS = "success"; 
    private static final String TAG_PAYSLIP = "payslip"; 
    private static final String TAG_PID = "pid"; 
    private static final String TAG_NAME = "name"; 
    private static final String TAG_PAYSLIPNO = "payslipno"; 
    private static final String TAG_NETSALARY = "netsalary"; 
    private static final String TAG_ISSUEDATE = "issuedate"; 
    private static final String TAG_STARTOFPAYSLIP = "startofpayslip"; 
    private static final String TAG_ENDOFPAYSLIP = "endofpayslip"; 
    private static final String TAG_TYPEOFALLOWANCE = "typeofallowance"; 
    private static final String TAG_ALLOWANCEAMT = "allowanceamt"; 
    private static final String TAG_ALLOWANCEDATE = "allowancedate"; 
    private static final String TAG_AVAILABLEALLOWANCE = "availableallowance"; 
    private static final String TAG_TYPEOFDEDUCTION = "typeofdeduction"; 
    private static final String TAG_DEDUCTIONAMT = "deductionamt"; 
    private static final String TAG_DEDUCTIONDATE = "deductiondate"; 
    private static final String TAG_AGREEDOVERTIMERATE = "agreedovertimerate"; 
    private static final String TAG_OVERTIMERATE = "overtimerate"; 
    private static final String TAG_STARTOFOVERTIMEPERIOD = "startofovertimeperiod"; 
    private static final String TAG_ENDOFOVERTIMEPERIOD = "endofovertimeperiod"; 
    private static final String TAG_BASICSALARY = "basicsalary"; 
    private static final String TAG_EXTRAPAYMENT = "extrapayment"; 

    private static final String TAG_EMPLOYEE = "employ"; 
    private static final String TAG_SALARY = "pay"; 
    private static final String TAG_DESCRIPTION = "description"; 




    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.employeepayslip); 




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

    // Loading all fulltime employees in Background Thread 
    // getting employee details from intent 
    Intent i = getIntent(); 

    // getting employee id (pid) from intent 
    pid = i.getStringExtra(TAG_PID); 


    new GetEmployeeDetails().execute(); 

    } 
    class GetEmployeeDetails extends AsyncTask<String, String, String> { 

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

     /** 
     * Getting employee details in background thread 
     * */ 
     protected String doInBackground(String... params) { 

      // updating UI from Background Thread 

        // Check for success tag 
        int success; 
        try { 
         // Building Parameters 
         List<NameValuePair> params1 = new ArrayList<NameValuePair>(); 
         params1.add(new BasicNameValuePair("pid", pid)); 

         // getting employee details by making HTTP request 
         // Note that employee details url will use GET request 
         JSONObject json = jParser.makeHttpRequest(
           url_employees, "GET", params1); 

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

         // json success tag 
         success = json.getInt(TAG_SUCCESS); 
         if (success == 1) { 
          // successfully received employee details 
          JSONArray employeeObj = json 
            .getJSONArray(TAG_EMPLOYEE); // JSON Array 

          // get first employee object from JSON Array 
          JSONObject employee = employeeObj.getJSONObject(0); 

          // employee with this pid found 
          // Edit Text 
          employeeName = (TextView) findViewById(R.id.employeeName); 

          Desc = (TextView) findViewById(R.id.departmenttext); 

          // display employee data in EditText 
          employeeName.setText(employee.getString(TAG_NAME)); 

          Desc.setText(employee.getString(TAG_DESCRIPTION)); 

         }else{ 
          // employee 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(); 
     } 
    } 



} 

這是上一頁的代碼。此頁面的數據將傳遞到上面的另一頁面。

package com.example.splashscreentwo; 

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.telephony.SmsManager; 
import android.util.Log; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.widget.AdapterView; 
import android.widget.AdapterView.OnItemClickListener; 

import android.widget.ImageButton; 
import android.widget.ListAdapter; 
import android.widget.ListView; 
import android.widget.SimpleAdapter; 
import android.widget.TextView; 


public class AllFTemployeesActivity extends ListActivity 
{ 
LayoutInflater inflater; // Progress Dialog 
private ProgressDialog pDialog; 

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

ArrayList<HashMap<String, String>> employeesList; 

// url to get all fulltime employees list 

    private static String url_employees = "http://rollit.sg/FYP/Existing_employees_FullTime.php"; 

// JSON Node names 
private static final String TAG_SUCCESS = "success"; 
private static final String TAG_EMPLOYEE = "employee"; 
private static final String TAG_PID = "pid"; 
private static final String TAG_NAME = "name"; 
private static final String TAG_DESCRIPTION = "description"; 


// products JSONArray 
JSONArray employee = null;  private ListView listview; 

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


    ImageButton ButtonPT = (ImageButton) findViewById(R.id.btnpt); 
    ImageButton BtnAddEmployee = (ImageButton) findViewById(R.id.addEmployeeBtn); 

    BtnAddEmployee.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View view) { 
      // Launching emplopyee regstration Activity 
      Intent i = new Intent(getApplicationContext(), RegisterEmployeeActivity.class); 
      startActivity(i); 

      finish(); 

     } 
    }); 

    ButtonPT.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View view) { 
      // Launching All fulltime employees Activity 
      Intent i = new Intent(getApplicationContext(), AllPTemployeesActivity.class); 
      startActivity(i); 

      finish(); 

     } 
    }); 



    // Hashmap for ListView 
    employeesList = new ArrayList<HashMap<String, String>>(); 

    // Loading all fulltime employees in Background Thread 
    new LoadAllEmployee().execute(); 

    // Get listview 

    ListView lv = getListView(); 
    lv.setTextFilterEnabled(true); 


    //inflater = (LayoutInflater)this.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

    // View header = inflater.inflate(R.layout.planets_heade_view, null); 

    // lv.addHeaderView(header); 

     // on seleting single fulltime employee 
     // launching Edit single fulltime employee Screen 
    lv.setOnItemClickListener(new OnItemClickListener() { 

     @Override 
     public void onItemClick(AdapterView<?> parent, View view, 
       int position, long id) { 
      // getting values from selected ListItem 
      String pid = ((TextView) view.findViewById(R.id.pid)).getText() 
        .toString(); 


      // Starting new intent 
      Intent in = new Intent(getApplicationContext(), 
        EmployeePayslip.class); 
      // sending pid to next activity 
      in.putExtra(TAG_PID, pid); 

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

} // Response from Edit single fulltime employee 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 edited/deleted employee 
     // reload this screen again 
     Intent intent = getIntent(); 
     finish(); 
     startActivity(intent); 


    } 

} 

/** 
    * Background Async Task to Load all fulltime employees by making HTTP Request 
    * */ 
class LoadAllEmployee extends AsyncTask<String, String, String> { 

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

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

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

      if (success == 1) { 
       // fulltime employees found 
       // Getting Array of fulltime employees 
       employee = json.getJSONArray(TAG_EMPLOYEE); 

       // looping through All fulltime employees 
       for (int i = 0; i < employee.length(); i++) { 
        JSONObject c = employee.getJSONObject(i); 

        // Storing each json item in variable 
        String id = c.getString(TAG_PID); 
        String name = c.getString(TAG_NAME); 
        String description= c.getString(TAG_DESCRIPTION); 


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

        // adding each child node to HashMap key => value 
        map.put(TAG_PID, id); 
        map.put(TAG_NAME, name); 
        map.put(TAG_DESCRIPTION, description); 

        // adding HashList to ArrayList 
        employeesList.add(map); 
       } 
      } else { 
       // no fulltime employee found 
       // Launch Add New employee Activity 
       // Intent i = new Intent(getApplicationContext(), 
       //  NewProductActivity.class); 
       // Closing all previous activities 
       // i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
       // startActivity(i); 
      } 
     } 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 UI from Background Thread 
     runOnUiThread(new Runnable() { 
      public void run() { 
       /** 
        * Updating parsed JSON data into ListView 
        * */ 

       ListAdapter adapter = new SimpleAdapter(
         AllFTemployeesActivity.this, employeesList, 
         R.layout.list_item_ft, new String[] { TAG_PID, 
           TAG_NAME,TAG_DESCRIPTION}, 
         new int[] { R.id.pid, R.id.name, R.id.description}); 

       // updating listview 
       setListAdapter(adapter); 


      } 
     }); 

    } 


} } 

代碼有什麼問題?我錯過了什麼嗎?如果是這樣,請引導我,謝謝,我感謝任何幫助!

因此,字符串出現拼寫錯誤。在String中糾正拼寫後,我得到了這個錯誤。

E/AndroidRuntime(2421): FATAL EXCEPTION: AsyncTask #4 
E/AndroidRuntime(2421): java.lang.RuntimeException: An error occured while executing doInBackground() 
E/AndroidRuntime(2421):  at android.os.AsyncTask$3.done(AsyncTask.java:299) 
E/AndroidRuntime(2421):  at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:352) 
E/AndroidRuntime(2421):  at java.util.concurrent.FutureTask.setException(FutureTask.java:219) 
E/AndroidRuntime(2421):  at java.util.concurrent.FutureTask.run(FutureTask.java:239) 
E/AndroidRuntime(2421):  at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230) 
E/AndroidRuntime(2421):  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080) 
E/AndroidRuntime(2421):  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573) 
E/AndroidRuntime(2421):  at java.lang.Thread.run(Thread.java:841) 
E/AndroidRuntime(2421): Caused by: android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views. 
E/AndroidRuntime(2421):  at android.view.ViewRootImpl.checkThread(ViewRootImpl.java:6833) 
E/AndroidRuntime(2421):  at android.view.ViewRootImpl.requestLayout(ViewRootImpl.java:1082) 
E/AndroidRuntime(2421):  at android.view.View.requestLayout(View.java:16775) 
E/AndroidRuntime(2421):  at android.view.View.requestLayout(View.java:16775) 
E/AndroidRuntime(2421):  at android.view.View.requestLayout(View.java:16775) 
E/AndroidRuntime(2421):  at android.view.View.requestLayout(View.java:16775) 
E/AndroidRuntime(2421):  at android.view.View.requestLayout(View.java:16775) 
E/AndroidRuntime(2421):  at android.view.View.requestLayout(View.java:16775) 
E/AndroidRuntime(2421):  at android.widget.ScrollView.requestLayout(ScrollView.java:2120) 
E/AndroidRuntime(2421):  at android.view.View.requestLayout(View.java:16775) 
E/AndroidRuntime(2421):  at android.widget.TableLayout.requestLayout(TableLayout.java:230) 
E/AndroidRuntime(2421):  at android.view.View.requestLayout(View.java:16775) 
E/AndroidRuntime(2421):  at android.view.View.requestLayout(View.java:16775) 
E/AndroidRuntime(2421):  at android.widget.TextView.checkForRelayout(TextView.java:7660) 
E/AndroidRuntime(2421):  at android.widget.TextView.setText(TextView.java:4446) 
E/AndroidRuntime(2421):  at android.widget.TextView.setText(TextView.java:4283) 
E/AndroidRuntime(2421):  at android.widget.TextView.setText(TextView.java:4258) 
E/AndroidRuntime(2421):  at com.example.splashscreentwo.EmployeePayslip$GetEmployeeDetails.doInBackground(EmployeePayslip.java:153) 
E/AndroidRuntime(2421):  at com.example.splashscreentwo.EmployeePayslip$GetEmployeeDetails.doInBackground(EmployeePayslip.java:1) 
E/AndroidRuntime(2421):  at android.os.AsyncTask$2.call(AsyncTask.java:287) 
E/AndroidRuntime(2421):  at java.util.concurrent.FutureTask.run(FutureTask.java:234) 
E/AndroidRuntime(2421):  ... 4 more 
D/AbsListView(2421): onVisibilityChanged() is called, visibility : 0 
D/AbsListView(2421): unregisterIRListener() is called 
D/AbsListView(2421): unregisterIRListener() is called 
E/WindowManager(2421): Activity com.example.splashscreentwo.EmployeePayslip has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView{42e528b0 V.E..... R.....ID 0,0-640,230} that was originally added here 
E/WindowManager(2421): android.view.WindowLeaked: Activity com.example.splashscreentwo.EmployeePayslip has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView{42e528b0 V.E..... R.....ID 0,0-640,230} that was originally added here 
E/WindowManager(2421): at android.view.ViewRootImpl.<init>(ViewRootImpl.java:454) 
E/WindowManager(2421): at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:258) 
E/WindowManager(2421): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:73) 
E/WindowManager(2421): at android.app.Dialog.show(Dialog.java:287) 
E/WindowManager(2421): at com.example.splashscreentwo.EmployeePayslip$GetEmployeeDetails.onPreExecute(EmployeePayslip.java:111) 
E/WindowManager(2421): at android.os.AsyncTask.executeOnExecutor(AsyncTask.java:586) 
E/WindowManager(2421): at android.os.AsyncTask.execute(AsyncTask.java:534) 
E/WindowManager(2421): at com.example.splashscreentwo.EmployeePayslip.onCreate(EmployeePayslip.java:93) 
E/WindowManager(2421): at android.app.Activity.performCreate(Activity.java:5372) 
E/WindowManager(2421): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1104) 
E/WindowManager(2421): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2270) 
E/WindowManager(2421): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2362) 
E/WindowManager(2421): at android.app.ActivityThread.access$700(ActivityThread.java:168) 
E/WindowManager(2421): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1329) 
E/WindowManager(2421): at android.os.Handler.dispatchMessage(Handler.java:99) 
E/WindowManager(2421): at android.os.Looper.loop(Looper.java:137) 
E/WindowManager(2421): at android.app.ActivityThread.main(ActivityThread.java:5493) 
E/WindowManager(2421): at java.lang.reflect.Method.invokeNative(Native Method) 
E/WindowManager(2421): at java.lang.reflect.Method.invoke(Method.java:525) 
E/WindowManager(2421): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1209) 
E/WindowManager(2421): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1025) 
E/WindowManager(2421): at dalvik.system.NativeStart.main(Native Method) 
+1

你確定這部分是正確的: 私有靜態最後絃樂TAG_EMPLOYEE =「僱用」; 請把你的JSON輸出。 – user666

+0

關於你的更新..請參閱_Caused by_ line ... ***只有創建視圖層次結構的原始線程才能觸及其視圖。*** – ADTC

+0

那麼,我該如何解決它? – user3021001

回答

0

而是在EmployeePayslip

// Loading all fulltime employees in Background Thread 
// getting employee details from intent 
Intent i = getIntent(); 

// getting employee id (pid) from intent 
pid = i.getStringExtra(TAG_PID); 

以下給出一個嘗試用以下

Bundle extras = getIntent().getExtras(); 

if (extras != null) 
{ 
    pid = extras.getString(TAG_PID); 
} 

編輯:似乎@ user666是正確的。第一個正確的TAG_EMPLOYEE這兩類如下拼寫:

private static final String TAG_EMPLOYEE = "employee"; 
+0

我做了以下兩個,我結束了一些錯誤,張貼^ – user3021001

+0

在EmployeePayslip類中添加一個斷點在JSONArray上的#138行的GetEmployeeDetails異步任務的doInBackground()方法employeeObj = json.getJSONArray(TAG_EMPLOYEE); // JSON數組應用程序無法找到**僱用的節點**請確保您在AllFTemployeesActivity中添加「employ」作爲節點而不是「employee」 –

+0

你的意思是什麼斷點?對不起,我不太瞭解這個說法。我已經將節點名稱更改爲員工。 @tabrejKhan – user3021001

相關問題