java - Android onClick 不起作用

标签 java android onclick textview

我是java新手,如果这是一个基本问题,我深表歉意。我正在尝试使用从另一个类返回的方法来更新 TextView 。

我有以下两个类(class):

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 中工作。

任何帮助将不胜感激。干杯!

最佳答案

我找到了这个 :)

The reason why your application crashes on Android versions 3.0 and above, but works fine on Android 2.x is because Honeycomb and Ice Cream Sandwich are much stricter about abuse against the UI Thread. For example, when an Android device running HoneyComb or above detects a network access on the UI thread, a NetworkOnMainThreadException will be thrown:



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

当应用程序尝试在其主线程上执行网络操作时,会引发 NetworkOnMainThreadException。这仅针对面向 Honeycomb SDK 或更高版本的应用程序抛出。允许以早期 SDK 版本为目标的应用程序在其主事件循环线程上进行网络连接,但非常不鼓励这样做。

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

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

关于java - Android onClick 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32992800/

相关文章:

java - 通过 Spring Data 将 joda DateTime 插入 MongoDB 时出错

android - 自动回复?

Android,沿路径移动位图?

Android——截屏

Javascript:检测复选框是否选中不起作用

java - multidex 应用程序在尝试运行仪器测试时出现 ZipException : duplicate entry for junit,

java - 如何在不提交更改的情况下获取代码分析窗口?

jquery - 单击时使用 jQuery 拆分或连接文本

jquery - 单击选项即可显示元素

java - JPanel 遮挡 BufferedImage