2012-06-25 54 views
0

我有一些活动是用户通过它,并最终将选定的数据发送到服务器保存在一个数据库。过程如下NPException当返回到另一个活动

activity1用户登录到应用程序并单击确定 如果sucessfull - activity2客户列表从远程服务器加载到AutoCompleteTextView中。 用户选择客户并进入下一个活动3 在acitivity3中,用户选择一些数据并将其发送到服务器。现在,当发送成功时,我希望用户看到activity2,这是我能够做到的。但是当我再次从自动完成中选择一个客户,我得到NPEx。为什么?当我从一个活动移动到另一个活动时删除的数据。因此,在我的情况下,从远程数据库加载到activity2的数据不再可用,即当我返回时,arraylist为null。

我得到这一行的错误---为(客户的客户:客户)

@Override 
    public void onItemClick(AdapterView<?> adapter, View view, int pos, long rowId) {  
     String cusAddr = null; 

      int cusID = BaseKaizenActivity.getStorageManager().getCustomerId(customerTextView.getText().toString()); 
      Log.d("CUSTOMER ID", Integer.toString(cusID)); 
      for (Customer customer : customers) { 
       if (Integer.parseInt(customer.getId()) == cusID) { 
        cusAddr = customer.getAddress(); 
       } 
      } 

     customerAddr.setTypeface(tf); 
     customerAddr.setText(Farsi.Convert(cusAddr)); 

     //customerAddr.setText(cusAddr);  

    } 

这里是日志中的错误的

06-25 07:46:42.854: W/dalvikvm(572): threadid=1: thread exiting with uncaught exception  (group=0x40015560) 
06-25 07:46:42.864: E/AndroidRuntime(572): FATAL EXCEPTION: main 
06-25 07:46:42.864: E/AndroidRuntime(572): java.lang.NullPointerException 
06-25 07:46:42.864: E/AndroidRuntime(572): at  com.pda.kaizen.activity.MainMenuActivity.onItemClick(MainMenuActivity.java:144) 
06-25 07:46:42.864: E/AndroidRuntime(572): at android.widget.AutoCompleteTextView.performCompletion(AutoCompleteTextView.java:952) 
06-25 07:46:42.864: E/AndroidRuntime(572): at android.widget.AutoCompleteTextView.access$1400(AutoCompleteTextView.java:92) 
06-25 07:46:42.864: E/AndroidRuntime(572): at android.widget.AutoCompleteTextView$DropDownItemClickListener.onItemClick(AutoCompleteTextView.java:1489) 
06-25 07:46:42.864: E/AndroidRuntime(572): at android.widget.AdapterView.performItemClick(AdapterView.java:284) 
06-25 07:46:42.864: E/AndroidRuntime(572): at android.widget.ListView.performItemClick(ListView.java:3513) 
06-25 07:46:42.864: E/AndroidRuntime(572): at android.widget.AbsListView$PerformClick.run(AbsListView.java:1812) 
06-25 07:46:42.864: E/AndroidRuntime(572): at android.os.Handler.handleCallback(Handler.java:587) 
06-25 07:46:42.864: E/AndroidRuntime(572): at android.os.Handler.dispatchMessage(Handler.java:92) 
06-25 07:46:42.864: E/AndroidRuntime(572): at android.os.Looper.loop(Looper.java:123) 
06-25 07:46:42.864: E/AndroidRuntime(572): at android.app.ActivityThread.main(ActivityThread.java:3683) 
06-25 07:46:42.864: E/AndroidRuntime(572): at java.lang.reflect.Method.invokeNative(Native Method) 
06-25 07:46:42.864: E/AndroidRuntime(572): at java.lang.reflect.Method.invoke(Method.java:507) 
06-25 07:46:42.864: E/AndroidRuntime(572): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 
06-25 07:46:42.864: E/AndroidRuntime(572): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
06-25 07:46:42.864: E/AndroidRuntime(572): at dalvik.system.NativeStart.main(Native Method) 

公共类MainMenuActivity扩展BaseKaizenActivity实现OnItemClickListener {

public AutoCompleteTextView customerTextView; 
public EditText customerAddr; 
private int customerId; 
private List<Customer> customers; 
private String customerName; 
private Typeface tf; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.mainmenu); 
    Log.d("INSIDE MAINMENU ACTIVITY", "INSIDE MAINMENU ACTIVITY"); 
    tf = Farsi.GetFarsiFont(this); 

    customerTextView = (AutoCompleteTextView) findViewById(R.id.cusName_CB); 
    customerTextView.setOnItemClickListener(this); 
    customerTextView.setThreshold(0); 
    customerTextView.setHint("Type Customer name"); 
    customerAddr = (EditText) findViewById(R.id.editText_cusAddress); 

    // check loaded customers and products 
    // if haven't loaded - need to load 
    if (BaseKaizenActivity.getStorageManager().getCustomers().size() == 0) { 
     progressDialog = ProgressDialog.show(this, "Please Wait", "Loading customer list"); 
     loadCustomers(); 
    } 
    else { 
     handleSuccess(BaseKaizenActivity.getStorageManager().getCustomers()); 
    } 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    MenuInflater inflater = getMenuInflater(); 
    inflater.inflate(R.menu.menu, menu); 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
     case R.id.order_menu: 
      customerName = customerTextView.getText().toString(); 

      if (!customerName.isEmpty() && (customerId = BaseKaizenActivity.getStorageManager().getCustomerId(customerName)) != 0) { 
       Log.d("----", " customer_id : " + customerId); 
       showOrderScreen(customerId); 
      } 
      else { 
       Toast.makeText(this, "Select a customer", Toast.LENGTH_LONG).show(); 
      } 

      break; 
     case R.id.customer_menu: 
      //TODO - need implement 
      Toast.makeText(this, "You pressed the Customer!", Toast.LENGTH_LONG).show(); 
      break; 
    } 
    return true; 
} 


private void loadCustomers() { 
    Thread thread = new Thread(new Runnable() { 
     @Override 
     public void run() { 
      try{ 
       customers = getConnection().getCustomers(); 
       BaseKaizenActivity.getStorageManager().setCustomers(customers); 
       Log.d("---", "loadedddddddd : customers: " + customers.size()); 
       for(Customer c : customers) 
       { 
        Log.d("Customer name ", c.getName()); 
       } 
       handleSuccess(customers); 

      } 
      catch (Exception exc) { 
       Log.d("--- ERROR ---", exc.getMessage()); 
       handleException(exc.getMessage()); 
      } 
     } 
    }); 
    thread.start(); 
} 



private void handleSuccess(final List<Customer> customers) { 
    runOnUiThread(new Runnable() { 
     @Override 
     public void run() { 
      final ArrayAdapter<Customer> customerSpinner = new ArrayAdapter<Customer>(MainMenuActivity.this, 
        android.R.layout.simple_spinner_item, customers); 
      customerSpinner.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
      customerTextView.setAdapter(customerSpinner); 

      if (progressDialog != null) { 
       progressDialog.dismiss(); 
       progressDialog = null; 
      } 
     } 
    }); 
} 

@SuppressWarnings("unchecked") 
private void showOrderScreen(int cusstomerId) { 
    showActivity(OrderActivity.class, new Pair<String, Integer>("CUSTOMER_ID", cusstomerId)); 
} 


@Override 
public void onItemClick(AdapterView<?> adapter, View view, int pos, long rowId) {  
    String cusAddr = null; 

     int cusID = BaseKaizenActivity.getStorageManager().getCustomerId(customerTextView.getText().toString()); 
     Log.d("CUSTOMER ID", Integer.toString(cusID)); 

     if(customers.isEmpty()) 
     { 
      loadCustomers(); 
     } 
     for (Customer customer : customers) { 
      if (Integer.parseInt(customer.getId()) == cusID) { 
       cusAddr = customer.getAddress(); 
      } 
     } 

    customerAddr.setTypeface(tf); 
    customerAddr.setText(Farsi.Convert(cusAddr)); 

    //customerAddr.setText(cusAddr);  

} 

}

+1

需要这个活动的更多代码与日志猫...... –

+0

需要活动以及有很多可能性.. –

回答

0

我解决了这个问题,问题是当我返回先前的活动时,数组列表为空,并且不包含它从前一次搜索中获得的数据。我通过在OnCreate方法中再次加载数据解决了这个问题。

相关问题