Android onClick无法正常工作

时间:2015-10-07 12:55:15

标签: java android onclick textview

我是java的新手,如果这是一个基本问题,请道歉。我试图通过从另一个类返回一个方法来更新textview。

我有以下两个类:

public class MainActivity extends AppCompatActivity {

TextView tvOut;
Button btnOk;
Button btnCancel;
String result;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    // find View-elements
    tvOut = (TextView) findViewById(R.id.tvOut);
    btnOk = (Button) findViewById(R.id.btnOk);
    btnCancel = (Button) findViewById(R.id.btnCancel);

    // assign click listener to the OK button (btnOK)
    btnOk.setOnClickListener(
            new Button.OnClickListener() {
                public void onClick(View v) {

                    try {
                        result = strava.get_Events();
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                    tvOut.setText(result);
                }
            }
    );
}
}

public class strava {
public static String get_Events() throws Exception{
    URL strava = new URL("https://www.strava.com/api/v3/clubs/100138/group_events?access_token=OMITTED FOR PRIVACY");
    URLConnection yc = strava.openConnection();
    BufferedReader in = new BufferedReader(new InputStreamReader(yc.getInputStream()));

    StringBuilder builder = new StringBuilder();
    String inputLine;

    while ((inputLine = in.readLine()) != null) {
        builder.append(inputLine);
    }
    return builder.toString();
}
}

我希望按下OK按钮,它将返回strava get_Events()方法中的值。我在IntelliJ中使用它但无法在Android Studio中使用它。

非常感谢任何帮助。干杯!

3 个答案:

答案 0 :(得分:1)

我发现了这个:)

  

您的应用程序在Android 3.0及更高版本上崩溃的原因,但在Android 2.x上工作正常是因为Honeycomb和Ice Cream Sandwich对于滥用UI线程更为严格。例如,当运行HoneyComb或更高版本的Android设备检测到UI线程上的网络访问时,将抛出NetworkOnMainThreadException:

E / AndroidRuntime(673):java.lang.RuntimeException:无法启动活动     ComponentInfo {com.example / com.example.ExampleActivity}:android.os.NetworkOnMainThreadException 关于为什么会发生这种情况的解释在Android开发人员的网站上有详细记录:

当应用程序尝试在其主线程上执行网络操作时,将引发NetworkOnMainThreadException。仅针对Honeycomb SDK或更高版本的应用程序进行此操作。针对早期SDK版本的应用程序可以在其主要事件循环线程上进行联网,但是非常不鼓励。

ICS和Honeycomb不允许您在UI线程上执行的其他操作的一些示例是:

打开Socket连接(即新的Socket())。 HTTP请求(即HTTPClient和HTTPUrlConnection)。 试图连接到远程MySQL数据库。 下载文件(即Downloader.downloadFile())。 如果您尝试在UI线程上执行任何这些操作,则必须将它们包装在工作线程中。最简单的方法是使用AsyncTask,它允许您在用户界面上执行异步工作。 AsyncTask将在工作线程中执行阻塞操作,并将结果发布到UI线程上,而不需要您自己处理线程和/或处理程序。

答案 1 :(得分:0)

在你的代码中,你正在做

sudo apt-get install libqt5xmlpatterns5-dev

尝试替换

 btnOk.setOnClickListener(
        new Button.OnClickListener() {

new Button.OnClickListener

可能会有所帮助

答案 2 :(得分:0)

您需要在侦听器中进行更改,只需删除按钮并使用Click on click事件侦听器。我认为它适用于你的情况。

new View.OnClickListener