每当我点击“提交”按钮时,我都会收到错误“不幸的是,应用程序已停止工作”。请帮帮我。
代码 -
public void onClick(View v) {
TextView t = (TextView) findViewById(R.id.textView4);
if(from == to)
{
Toast.makeText(getApplicationContext(), "Invalid", 4000).show();
}
else
{
try {
s = getJson("URL");
JSONObject jObj;
jObj = new JSONObject(s);
String exResult = jObj.getJSONObject("query").getJSONObject("results").getJSONObject("rate").getString("Rate");
t.setText(exResult);
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
});
}
LogCat -
03-15 12:06:17.508:E / AndroidRuntime(877):致命异常:主要 03-15 12:06:17.508:E / AndroidRuntime(877):android.os.NetworkOnMainThreadException 03-15 12:06:17.508:E / AndroidRuntime(877):在android.os.StrictMode $ AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1117) 03-15 12:06:17.508:E / AndroidRuntime(877):at java.net.InetAddress.lookupHostByName(InetAddress.java:385) 03-15 12:06:17.508:E / AndroidRuntime(877):at java.net.InetAddress.getAllByNameImpl(InetAddress.java:236) 03-15 12:06:17.508:E / AndroidRuntime(877):at java.net.InetAddress.getAllByName(InetAddress.java:214) 03-15 12:06:17.508:E / AndroidRuntime(877):at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:137) 03-15 12:06:17.508:E / AndroidRuntime(877):at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164) 03-15 12:06:17.508:E / AndroidRuntime(877):at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119) 03-15 12:06:17.508:E / AndroidRuntime(877):at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:360) 03-15 12:06:17.508:E / AndroidRuntime(877):at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555) 03-15 12:06:17.508:E / AndroidRuntime(877):at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487) 03-15 12:06:17.508:E / AndroidRuntime(877):at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465) 03-15 12:06:17.508:E / AndroidRuntime(877):at myandroid.myfirstmodule.sconverter.getJson(sconverter.java:163) 03-15 12:06:17.508:E / AndroidRuntime(877):at myandroid.myfirstmodule.sconverter $ 1.onClick(sconverter.java:96) 03-15 12:06:17.508:E / AndroidRuntime(877):在android.view.View.performClick(View.java:4084) 03-15 12:06:17.508:E / AndroidRuntime(877):在android.view.View $ PerformClick.run(View.java:16966) 03-15 12:06:17.508:E / AndroidRuntime(877):在android.os.Handler.handleCallback(Handler.java:615) 03-15 12:06:17.508:E / AndroidRuntime(877):在android.os.Handler.dispatchMessage(Handler.java:92) 03-15 12:06:17.508:E / AndroidRuntime(877):在android.os.Looper.loop(Looper.java:137) 03-15 12:06:17.508:E / AndroidRuntime(877):在android.app.ActivityThread.main(ActivityThread.java:4745) 03-15 12:06:17.508:E / AndroidRuntime(877):at java.lang.reflect.Method.invokeNative(Native Method) 03-15 12:06:17.508:E / AndroidRuntime(877):at java.lang.reflect.Method.invoke(Method.java:511) 03-15 12:06:17.508:E / AndroidRuntime(877):at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:786) 03-15 12:06:17.508:E / AndroidRuntime(877):at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 03-15 12:06:17.508:E / AndroidRuntime(877):at dalvik.system.NativeStart.main(Native Method)
答案 0 :(得分:0)
为什么不在布局中实现onclickevent,如下所示:
<Button
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Click Here"
android:onClick="btnClicked" />
然后定义方法btnClicked()
。我认为你可以使用这个onClickListener和自定义方法。您甚至可以对button1使用相同的方法,并在其内部确定已调用的按钮。
答案 1 :(得分:0)
我不确定您的代码目标到底是什么。但是我不认为将提交内容的onClick放在按钮b的onCLick上是正确的。你需要单独处理它们。如果你想在一个onClickListener中,你可以这样做:
int x, y, product;
public OnClickListener buttonClickListener = new OnClickListener() {
@Override
public void onClick(View v) {
switch (v.getId()) {
case <button b id>:
//fetch values of x and y
x = Integer.parseInt(yourtextbox1.getText().toString());
y = Integer.parseInt(yourtextbox2.getText().toString());
break;
case <button submit final id>:
//multiply x and y
product = x*y;
//display the product
yourtextbox3.setText(product);
break;
}
};
b.setOnClickListener(buttonClickListener);
submitFinal.setOnClickListener(buttonClickListener);
编辑:
在您当前的代码中,移动以下行:
t = (TextView) findViewById(R.id.textView4);
displayfinal = (TextView) findViewById(R.id.textView3);
在你的onclick听众之外。
希望有所帮助。
答案 2 :(得分:0)
您可能会尝试从else块移动第二个按钮的侦听器。 我认为将侦听器放在另一个侦听器
中并不是一个好习惯