我是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中使用它。
非常感谢任何帮助。干杯!
答案 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