我有一个列表活动,其中包含所有处方的列表。当点击列表项活动编辑处方时,会更新表并在成功时切换回列表活动并重新加载它。
但更新后我回到列表活动错误:无法启动活动组件信息java.lang.nullpointerexception显示。
行号堆栈跟踪中的87是pid = extras.getString(“TAG_PATIENT_ID”);在DocPresc列表活动中。
这是我的列表活动:
public class DocPresc extends ListActivity {
//public static Context ctx;
JSONParser jParser = new JSONParser();
ArrayList<HashMap<String, String>> productsList = new ArrayList<HashMap<String,String>>();
String pid;
JSONArray products = null;
EditText ailm,date,comment;
Button delete;
JSONParser jsonParser = new JSONParser();
// single product url
private static final String url_patient_presc = "http://192.168.44.208/get_prescription.php";
// JSON Node names
private static final String TAG_SUCCESS = "success";
private static final String TAG_PRODUCTS = "products";
// private static final String TAG_PATIENT_ID = "patient_id";
private static final String TAG_AIL = "ailment";
private static final String TAG_MED = "medicine_name";
private static final String TAG_D1 = "qty1";
private static final String TAG_D2 = "qty2";
private static final String TAG_D3 = "qty3";
private static final String TAG_DATE = "prescription_date";
private static final String TAG_COM = "comment";
private static final String TAG_DID = "dosage_id";
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.docpresc);
StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
.detectDiskReads().detectDiskWrites().detectNetwork() // StrictMode is most commonly used to catch accidental disk or network access on the application's main thread
.penaltyLog().build());
this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
Intent i = getIntent();
Bundle extras = i.getExtras();
pid = extras.getString("TAG_PATIENT_ID");
System.out.println("Docpresc"+pid);
ailm = (EditText)findViewById(R.id.ailment1);
date = (EditText)findViewById(R.id.date1);
comment = (EditText)findViewById(R.id.comment1);
new LoadPrescriptions().execute();
}
class LoadPrescriptions extends AsyncTask<String, String, String> {
protected String doInBackground(String... args) {
// Building Parameters
runOnUiThread(new Runnable() {
public void run() {
try {
List<NameValuePair> params = new ArrayList<NameValuePair>();
// getting JSON string from URL
params.add(new BasicNameValuePair("patient_id",pid));//search1.getText().toString()));
System.out.println("database"+pid);
JSONObject json = jParser.makeHttpRequest(url_patient_presc, "GET", params);
// Check your log cat for JSON reponse
Log.d("All Patients: ", json.toString());
// Checking for SUCCESS TAG
int success = json.getInt(TAG_SUCCESS);
if (success == 1) {
// products found
// Getting Array of Products
products = json.getJSONArray(TAG_PRODUCTS);
//-----------------------------------
/*JSONObject product = products.getJSONObject(0);
ailm = (EditText)findViewById(R.id.ailment1);
ailm.setText(product.getString(TAG_AIL));*/
// looping through All Products
for (int i = 0; i < products.length(); i++) {
JSONObject c = products.getJSONObject(i);
// Storing each json item in variable
String medicine = c.getString(TAG_MED).toUpperCase();
String qty1 = c.getString(TAG_D1).toUpperCase();
String qty2 = c.getString(TAG_D2).toUpperCase();
String qty3 = c.getString(TAG_D3).toUpperCase();
String dsg_id = c.getString(TAG_DID).toUpperCase();
//String ail = c.getString(TAG_AIL).toUpperCase();
ailm.setText(c.getString(TAG_AIL));
date.setText(c.getString(TAG_DATE));
comment.setText(c.getString(TAG_COM));
// creating new HashMap
HashMap<String, String> map = new HashMap<String, String>();
// adding each child node to HashMap key => value
map.put(TAG_MED, medicine);
map.put(TAG_D1,qty1);
map.put(TAG_D2,qty2);
map.put(TAG_D3,qty3);
map.put(TAG_DID,dsg_id);
// adding HashList to ArrayList
productsList.add(map);
}
} else {
}
} 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() {
ListAdapter adapter = new SimpleAdapter(
DocPresc.this, productsList,
R.layout.list_item2, new String[] {
TAG_MED,TAG_D1,TAG_D2,TAG_D3,TAG_DID},
new int[] {R.id.med,R.id.d1,R.id.d2,R.id.d3,R.id.did });
// updating listview
//setListAdapter(adapter);
setListAdapter(adapter);
}
});
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.items, menu);
//menuSearch = menu.findItem(R.id.delete);
//menuSearch.setVisible(false);
return super.onCreateOptionsMenu(menu);
}
public boolean onOptionsItemSelected(MenuItem item) {
// handle item selection
switch (item.getItemId()) {
case R.id.add:
Bundle bundle = new Bundle();
bundle.putString("TAG_PATIENT_ID",pid );
System.out.println("bundle"+pid);
Intent i = new Intent(DocPresc.this,AddPresc.class);
i.putExtras(bundle);
startActivity(i);
//finish();
// startActivity(new Intent(DocPresc.this,AddPresc.class));
// finish();
// Intent i = getIntent();
// finish();
// startActivity(i);
// case R.id.print:
return true;
default:
return super.onOptionsItemSelected(item);
}
}
public void onListItemClick(ListView lv, View v, int position, long id) {
// TODO Auto-generated method stub
//onAttach(getActivity());
//lv.setAdapter(adapter);
String did1 = ((TextView) v.findViewById(R.id.did)).getText().toString();
String med1 = ((TextView) v.findViewById(R.id.med)).getText().toString();
String dg1 = ((TextView) v.findViewById(R.id.d1)).getText().toString();
String dg2 = ((TextView) v.findViewById(R.id.d2)).getText().toString();
String dg3 = ((TextView) v.findViewById(R.id.d3)).getText().toString();
// System.out.println("all patient"+id1);
Bundle bundle = new Bundle();
bundle.putString("TAG_DOSAGE_ID",did1 );
bundle.putString("TAG_DOSAGE_ID1",med1 );
bundle.putString("TAG_DOSAGE_ID2",dg1 );
bundle.putString("TAG_DOSAGE_ID3",dg2 );
bundle.putString("TAG_DOSAGE_ID4",dg3 );
// System.out.println("bundle"+id1);
Intent i = new Intent(DocPresc.this,EditPresc.class);
i.putExtras(bundle);
startActivityForResult(i,100);
//passData(date);
}
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 product
// reload this screen again
Intent intent = getIntent();
finish();
startActivity(intent);
}
}
}
这是编辑处方活动
public class EditPresc extends Activity implements View.OnClickListener{
//public static Context ctx;
EditText medicine;
EditText dosage1;
EditText dosage2;
EditText dosage3;
Button edit;
ImageButton up1 , up2,up3;
ImageButton down1,down2,down3;
String did,medi,q1,q2,q3;
int count = 1;
//JSONArray products = null;
//int pid = "100";
//private ProgressDialog pDialog;
// JSON parser class
JSONParser jsonParser = new JSONParser();
// single product url
// private static final String url_getdosage = "http://192.168.44.208/get_dosage.php";
private static final String url_updatedosage = "http://192.168.44.208/update_dosage.php";
// JSON Node names
private static final String TAG_SUCCESS = "success";
private static final String TAG_PRODUCT = "product";
// private static final String TAG_PATIENT_ID = "patient_id";
private static final String TAG_MED = "medicine_name";
private static final String TAG_D1 = "qty1";
private static final String TAG_D2 = "qty2";
private static final String TAG_D3 = "qty3";
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.editpresc);
StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
.detectDiskReads().detectDiskWrites().detectNetwork() // StrictMode is most commonly used to catch accidental disk or network access on the application's main thread
.penaltyLog().build());
this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
Intent i = getIntent();
Bundle extras = i.getExtras();
did = extras.getString("TAG_DOSAGE_ID");
medi = extras.getString("TAG_DOSAGE_ID1");
q1 = extras.getString("TAG_DOSAGE_ID2");
q2 = extras.getString("TAG_DOSAGE_ID3");
q3 = extras.getString("TAG_DOSAGE_ID4");
medicine = (EditText)findViewById(R.id.atxt1);
dosage1 = (EditText)findViewById(R.id.text1);
dosage2 = (EditText)findViewById(R.id.text2);
dosage3 = (EditText)findViewById(R.id.text3);
medicine.setText(medi);
dosage1.setText(q1);
dosage2.setText(q2);
dosage3.setText(q3);
System.out.println("Editpresc"+did);
//send = (Button)findViewById(R.id.b1);
up1=(ImageButton)findViewById(R.id.up1);
down1=(ImageButton)findViewById(R.id.down1);
dosage1=(EditText)findViewById(R.id.text1);
up2=(ImageButton)findViewById(R.id.up2);
down2=(ImageButton)findViewById(R.id.down2);
dosage2=(EditText)findViewById(R.id.text2);
up3=(ImageButton)findViewById(R.id.up3);
down3=(ImageButton)findViewById(R.id.down3);
dosage3=(EditText)findViewById(R.id.text3);
//dosage1.setText("1");
up1.setOnClickListener(this);
up2.setOnClickListener(this);
up3.setOnClickListener(this);
down1.setOnClickListener(this);
down2.setOnClickListener(this);
down3.setOnClickListener(this);
//ailment = (EditText)findViewById(R.id.atxt);
//comment = (EditText)findViewById(R.id.ctxt);
//presc=(EditText)findViewById(R.id.presc_id);
edit = (Button)findViewById(R.id.save);
// new GetDosage().execute();
edit.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
new EditDosageDetails().execute();
}
});
}
private class EditDosageDetails extends AsyncTask<String, Void, String> {
// JSONObject product;
protected String doInBackground(String... args) {
//JSONObject product = null;
//id.setText(100);
// updating UI from Background Thread
runOnUiThread(new Runnable() {
public void run() {
String med = medicine.getText().toString();
System.out.println("editdosage"+med);
String do1 = dosage1.getText().toString();
String do2 = dosage2.getText().toString();
String do3 = dosage3.getText().toString();
// Building Parameters
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("medicine_name", med));
params.add(new BasicNameValuePair("dosage_id", did));
params.add(new BasicNameValuePair("qty1", do1));
params.add(new BasicNameValuePair("qty2", do2));
params.add(new BasicNameValuePair("qty3", do3));
JSONObject json = jsonParser.makeHttpRequest(url_updatedosage,
"POST", params);
// json success tag
// Log.d("Create Response", json.toString());
// check for success tag
try {
int success = json.getInt(TAG_SUCCESS);
if (success == 1) {
// successfully created product
Intent i = getIntent();
setResult(100, i);
finish();
// super.onBackPressed();
// closing this screen
} else {
// failed to create product
}
} catch (JSONException e) {
e.printStackTrace();
}
// }
}
});
//return product;
return null;
// });
// return product;
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.items, menu);
//menuSearch = menu.findItem(R.id.delete);
//menuSearch.setVisible(false);
return super.onCreateOptionsMenu(menu);
}
@Override
public void onClick(View v) {
switch(v.getId()){
case R.id.up1:
int a=Integer.parseInt(dosage1.getText().toString());
int b = a+1;
dosage1.setText(new Integer(b).toString());
break;
case R.id.down1:
a=Integer.parseInt(dosage1.getText().toString());
b = a-1;
dosage1.setText(new Integer(b).toString());
break;
case R.id.up2:
a=Integer.parseInt(dosage2.getText().toString());
b = a+1;
dosage2.setText(new Integer(b).toString());
break;
case R.id.down2:
a=Integer.parseInt(dosage2.getText().toString());
b = a-1;
dosage2.setText(new Integer(b).toString());
case R.id.up3:
a=Integer.parseInt(dosage3.getText().toString());
b = a+1;
dosage3.setText(new Integer(b).toString());
break;
case R.id.down3:
a=Integer.parseInt(dosage3.getText().toString());
b = a-1;
dosage3.setText(new Integer(b).toString());
break;
//case R.id.save:
// System.out.println("save pressed");
}
}
}
这是堆栈跟踪
06-13 17:59:35.558: E/AndroidRuntime(26369): FATAL EXCEPTION: main
06-13 17:59:35.558: E/AndroidRuntime(26369): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.actionbar/com.example.actionbar.DocPresc}: java.lang.NullPointerException
06-13 17:59:35.558: E/AndroidRuntime(26369): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2097)
06-13 17:59:35.558: E/AndroidRuntime(26369): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2122)
06-13 17:59:35.558: E/AndroidRuntime(26369): at android.app.ActivityThread.access$600(ActivityThread.java:140)
06-13 17:59:35.558: E/AndroidRuntime(26369): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1228)
06-13 17:59:35.558: E/AndroidRuntime(26369): at android.os.Handler.dispatchMessage(Handler.java:99)
06-13 17:59:35.558: E/AndroidRuntime(26369): at android.os.Looper.loop(Looper.java:137)
06-13 17:59:35.558: E/AndroidRuntime(26369): at android.app.ActivityThread.main(ActivityThread.java:4895)
06-13 17:59:35.558: E/AndroidRuntime(26369): at java.lang.reflect.Method.invokeNative(Native Method)
06-13 17:59:35.558: E/AndroidRuntime(26369): at java.lang.reflect.Method.invoke(Method.java:511)
06-13 17:59:35.558: E/AndroidRuntime(26369): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:994)
06-13 17:59:35.558: E/AndroidRuntime(26369): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:761)
06-13 17:59:35.558: E/AndroidRuntime(26369): at dalvik.system.NativeStart.main(Native Method)
06-13 17:59:35.558: E/AndroidRuntime(26369): Caused by: java.lang.NullPointerException
06-13 17:59:35.558: E/AndroidRuntime(26369): at com.example.actionbar.DocPresc.onCreate(DocPresc.java:87)
06-13 17:59:35.558: E/AndroidRuntime(26369): at android.app.Activity.performCreate(Activity.java:5163)
06-13 17:59:35.558: E/AndroidRuntime(26369): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1094)
06-13 17:59:35.558: E/AndroidRuntime(26369): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2061)
06-13 17:59:35.558: E/AndroidRuntime(26369): ... 11 more
答案 0 :(得分:0)
Bundle extras = i.getExtras(); pid = extras.getString(“TAG_PATIENT_ID”); 你在onCreate写了这个,但是有一个问题如果没有在这里选择项目就没有Extra:
public boolean onOptionsItemSelected(MenuItem item){
// handle item selection
switch (item.getItemId()) {
case R.id.add:
Bundle bundle = new Bundle();
bundle.putString("TAG_PATIENT_ID",pid );
System.out.println("bundle"+pid);
Intent i = new Intent(DocPresc.this,AddPresc.class);
i.putExtras(bundle);
startActivity(i);
//finish();
我不确定我的答案或是否说是胡说八道,但我看不出你的额外收入是如何进入onCreate之前另一项活动增加额外费用并称之为