我的自定义对话框需要一些帮助。这是我第一次构建自定义对话框,并且由于某种原因它不断崩溃。以下代码是我在onCreate()
方法中的代码。我想点击edittext框,弹出对话框,然后输入股票代码或股票价格,点击OK,它将填充edittext框。请帮忙
public void test() {
// Click on Stock Price to bring up dialog box
myStockPrice.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// Create the dialog
final Dialog dialog = new Dialog(
OptionsPricingCalculatorActivity.this);
// Set the content view to our xml layout
dialog.setContentView(R.layout.enterstocksym);
// Set the title of the dialog. this space is always drawn even
// if blank so might as well use it
dialog.setTitle("Ticker Symbol");
dialog.setCancelable(true);
// dialog.setMessage("Enter Company Ticker Symbol");
// Here we add functionality to our dialog box's content. In
// this example it's the two buttons
// Set an EditText view to get user input
input = (EditText) findViewById(R.id.StockSymbol);
input2 = (EditText) findViewById(R.id.StockPrice);
Button okButton = (Button) dialog.findViewById(R.id.BtnOk);
okButton.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
Tickervalue = input.getEditableText().toString().trim();
// Do something with value!
// Toast.makeText(getApplicationContext(), value,
// Toast.LENGTH_SHORT).show();
// Send Stock Symbol into Request
SoapObject request = new SoapObject(NAMESPACE,
METHOD_NAME);
request.addProperty("symbol", Tickervalue);
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
SoapEnvelope.VER11);
envelope.setOutputSoapObject(request);
envelope.dotNet = true;
HttpTransportSE httpTransport = new HttpTransportSE(
SERVICE_URL);
// httpTransport.debug = true;
try {
httpTransport.call(SOAP_ACTION, envelope);
SoapPrimitive result = (SoapPrimitive) envelope
.getResponse();
parseResponse(result.toString());
} catch (Exception e) {
Log.d("STOCK",
e.getClass().getName() + ": "
+ e.getMessage());
Toast t = Toast.makeText(
OptionsPricingCalculatorActivity.this,
e.getClass().getName() + ": "
+ e.getMessage(), 10);
t.show();
}
}
private void parseResponse(String response)
throws Exception {
// TODO Auto-generated method stub
DocumentBuilderFactory dbf = DocumentBuilderFactory
.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document document = db.parse(new InputSource(
new InputStreamReader(new ByteArrayInputStream(
response.getBytes()), "UTF-8")));
Element element = document.getDocumentElement();
NodeList stocks = element.getElementsByTagName("Stock");
if (stocks.getLength() > 0) {
for (int i = 0; i < stocks.getLength();) {
Element stock = (Element) stocks.item(i);
Element Tickervalue = (Element) stock
.getElementsByTagName("Last").item(0);
// Send data from response to OUTPUT object
EditText tv = (EditText) findViewById(R.id.txtStockPrice);
tv.setText(Tickervalue.getFirstChild()
.getNodeValue());
break;
}
}
}
});
Button cancelButton = (Button) dialog
.findViewById(R.id.BtnCancel);
cancelButton.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
dialog.dismiss();
}
});
dialog.show();
}
});
logcat的
09-24 04:10:51.252: ERROR/AndroidRuntime(428): FATAL EXCEPTION: main
09-24 04:10:51.252: ERROR/AndroidRuntime(428): java.lang.NullPointerException
09-24 04:10:51.252: ERROR/AndroidRuntime(428): at com.CSV.Buescher.OptionsPricingCalculatorActivity$2$1.onClick(OptionsPricingCalculatorActivity.java:186)
09-24 04:10:51.252: ERROR/AndroidRuntime(428): at android.view.View.performClick(View.java:2408)
09-24 04:10:51.252: ERROR/AndroidRuntime(428): at android.view.View$PerformClick.run(View.java:8816)
09-24 04:10:51.252: ERROR/AndroidRuntime(428): at android.os.Handler.handleCallback(Handler.java:587)
09-24 04:10:51.252: ERROR/AndroidRuntime(428): at android.os.Handler.dispatchMessage(Handler.java:92)
09-24 04:10:51.252: ERROR/AndroidRuntime(428): at android.os.Looper.loop(Looper.java:123)
09-24 04:10:51.252: ERROR/AndroidRuntime(428): at android.app.ActivityThread.main(ActivityThread.java:4627)
09-24 04:10:51.252: ERROR/AndroidRuntime(428): at java.lang.reflect.Method.invokeNative(Native Method)
09-24 04:10:51.252: ERROR/AndroidRuntime(428): at java.lang.reflect.Method.invoke(Method.java:521)
09-24 04:10:51.252: ERROR/AndroidRuntime(428): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
09-24 04:10:51.252: ERROR/AndroidRuntime(428): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
09-24 04:10:51.252: ERROR/AndroidRuntime(428): at dalvik.system.NativeStart.main(Native Method)
09-24 04:10:51.282: WARN/ActivityManager(59): Force finishing activity com.CSV.Buescher/.OptionsPricingCalculatorActivity
09-24 04:10:51.865: WARN/ActivityManager(59): Activity pause timeout for HistoryRecord{44ece368 com.CSV.Buescher/.OptionsPricingCalculatorActivity}
答案 0 :(得分:0)
很难用嵌套的匿名内部类来判断,但我认为你的小部件有ids StockSymbol和StockPrice都在对话框中。当你找到它们时,你会这样做:
input = (EditText)findViewById(R.id.StockSymbol);
input2 = (EditText)findViewById(R.id.StockPrice);
查看活动而不是对话框。它们未被找到,因此单击按钮时输入为空。试试这个:
input = (EditText)dialog.findViewById(R.id.StockSymbol);
input2 = (EditText)dialog.findViewById(R.id.StockPrice);
您可能希望打破内部类以使所有这些更容易阅读和调试。
答案 1 :(得分:0)
下面的代码很有魅力,但是我希望自定义布局能够正常工作。
由于
LinearLayout lila1= new LinearLayout(this);
lila1.setOrientation(1); //1 is for vertical orientation
final EditText input = new EditText(this);
final EditText input1 = new EditText(this);
lila1.addView(input);
lila1.addView(input1);
alert.setView(lila1);