Android 如何从OnClickListener.onClick方法调用方法?
请看一下上面的代码……代码有什么问题。当我点击按钮时,我什么也得不到。当我点击按钮时,我想获取第一个google结果的url…如果有人能帮助我,我将不胜感激您的代码是正确的,您似乎无法知道该方法正在被调用。考虑添加某种类型的通知,甚至到您的代码> DOMMETHONSE()/代码>方法,这样您就可以知道该方法是否被调用。 这样做:Android 如何从OnClickListener.onClick方法调用方法?,android,parsing,Android,Parsing,请看一下上面的代码……代码有什么问题。当我点击按钮时,我什么也得不到。当我点击按钮时,我想获取第一个google结果的url…如果有人能帮助我,我将不胜感激您的代码是正确的,您似乎无法知道该方法正在被调用。考虑添加某种类型的通知,甚至到您的代码> DOMMETHONSE()/代码>方法,这样您就可以知道该方法是否被调用。 这样做: import java.io.InputStreamReader; import java.io.Reader; import java.net.URL; impor
import java.io.InputStreamReader;
import java.io.Reader;
import java.net.URL;
import java.net.URLEncoder;
import com.google.gson.Gson;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.TextView;
public class SampleActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ImageButton button = (ImageButton) findViewById(R.id.imageButton1);
button.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
try {
doSomething();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
}
public void doSomething() throws Exception {
EditText search2 = (EditText)findViewById(R.id.editText1);
TextView urltext = (TextView)findViewById(R.id.textView1);
String google = "http://ajax.googleapis.com/ajax/services/search/web?v=1.0&q=";
String search = search2.toString() + "site:mysite.com";
String charset = "UTF-8";
URL url = new URL(google + URLEncoder.encode(search, charset));
Reader reader = new InputStreamReader(url.openStream(), charset);
GoogleResults results = new Gson().fromJson(reader, GoogleResults.class);
String voidurlresult = results.getResponseData().getResults().get(0).getUrl().toString();
urltext.setText(voidurlresult);
}
}
虽然代码看起来正确,但如果在set listener块之前发生错误,则可能无法设置按钮单击侦听器。将代码包装在错误陷阱中,以确定是否发生错误。这也是一种很好的编码实践,尤其是在访问外部资源时
也可能是被调用的方法出错,无法完成任务。你也应该在这个过程中设置陷阱。对不起,我的英语不好 实际上,您可以使用StackTrace获取当前方法的名称 以下是一个示例:
public void doSomething() throws Exception {
// Show toast when method is called:
Toast.makeText(this, "doSomething() is getting called", Toast.LENGTH_LONG).show();
// the rest of doSomthing()
}
我忘了提到,这种方法可能不适用于所有情况
public class Test {
public static void main(String args[]) {
trace(Thread.currentThread().getStackTrace());
new Test().doit();
trace(Thread.currentThread().getStackTrace());
}
public void doit() {
trace(Thread.currentThread().getStackTrace());
doitagain();
}
public void doitagain() {
trace(Thread.currentThread().getStackTrace());
}
public static void trace(StackTraceElement e[]) {
boolean doNext = false;
for (StackTraceElement s : e) {
if (doNext) {
System.out.println(s.getMethodName());
return;
}
doNext = s.getMethodName().equals("getStackTrace");
}
}
}
将try语句中包含的语句更改为。这将确保引用正确的类来调用该方法。我想我可能会迟到,但这可能会帮助其他人 不能在主线程上执行网络操作。您的代码会在系统引发的
NetworkOnMainThreadException
的情况下以静默方式失败。如果运行此代码并检查应用程序的LogCat输出,您将注意到异常
解决方案是在工作线程上执行网络操作。您可以在此用例中使用。尝试向
doSomething
方法添加日志消息或toast通知消息,以确保调用doSomething
方法。@slayton所说的是一个很好的测试,或者只是尝试设置urltext.setText(“嘿,我的点击成功了!”);很可能您从页面获取数据的方法没有按照您的意图工作。我将urltext.setText更改为某个内容来测试它,但它没有出现…如果这可以帮助我,请有人帮助我,我从中获得了最多的代码!
button.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
try {
SampleActivity.this.doSomething();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});