我正在尝试创建一个应用程序,让用户单击一个按钮,它将显示一个随机的月份。我在strings.xml文件中创建了一个字符串数组。 Bellow是我的main.java,strings.xml和activity.xml。我尝试运行应用程序,它只是强行关闭。
package com.example.datebutton;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
import android.graphics.Color;
public class Main extends Activity
{
Button btn;
@Override
public void onCreate(Bundle b)
{
super.onCreate(b);
setContentView(R.layout.activity_main);
btn = (Button) findViewById(R.id.btn1);
final String[] months = getResources().getStringArray(R.array.Months);
final TextView tv =(TextView)findViewById(R.id.text1);
btn.setOnClickListener(new View.OnClickListener()
{
public void onClick(View v)
{
int rand = (int) (Math.random() * 12);
tv.setText(months[rand]);
}
});
}
}
这是我的activity.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<Button
android:id="@+id/btn1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="updateMonth"
android:text="@string/app_name" />
<TextView
android:id="@+id/text1"
android:layout_width="68dp"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:gravity="center_vertical"
android:text="@array/Months" />
</LinearLayout>
这是我的strings.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">DateButton</string>
<string-array name="Months">
<item>January</item>
<item>Feburary</item>
<item>March</item>
<item>April</item>
<item>May</item>
<item>June</item>
<item>July</item>
<item>August</item>
<item>September</item>
<item>October</item>
<item>November</item>
<item>December</item>
</string-array>
</resources>
我仍然收到错误,应用程序仍然说遗憾的是您的应用已关闭。 logcat在下面。
09-11 16:55:17.472:W / Resources(1638):转换为字符串:TypedValue {t = 0x1 / d = 0x7f0c0000 a = -1 r = 0x7f0c0000} 09-11 16:55:17.512:D / AndroidRuntime(1638):关闭VM 09-11 16:55:17.512:W / dalvikvm(1638):threadid = 1:线程退出未捕获的异常(group = 0xb3a8fba8) 09-11 16:55:17.532:E / AndroidRuntime(1638):致命异常:主要 09-11 16:55:17.532:E / AndroidRuntime(1638):进程:com.example.datebutton,PID:1638 09-11 16:55:17.532:E / AndroidRuntime(1638):java.lang.RuntimeException:无法启动活动ComponentInfo {com.example.datebutton / com.example.datebutton.Main}:java.lang.ClassCastException:android .widget.TextView无法强制转换为android.widget.Button 09-11 16:55:17.532:E / AndroidRuntime(1638):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2195) 09-11 16:55:17.532:E / AndroidRuntime(1638):在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245) 09-11 16:55:17.532:E / AndroidRuntime(1638):在android.app.ActivityThread.access $ 800(ActivityThread.java:135) 09-11 16:55:17.532:E / AndroidRuntime(1638):在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1196) 09-11 16:55:17.532:E / AndroidRuntime(1638):在android.os.Handler.dispatchMessage(Handler.java:102) 09-11 16:55:17.532:E / AndroidRuntime(1638):在android.os.Looper.loop(Looper.java:136) 09-11 16:55:17.532:E / AndroidRuntime(1638):在android.app.ActivityThread.main(ActivityThread.java:5017) 09-11 16:55:17.532:E / AndroidRuntime(1638):at java.lang.reflect.Method.invokeNative(Native Method) 09-11 16:55:17.532:E / AndroidRuntime(1638):at java.lang.reflect.Method.invoke(Method.java:515) 09-11 16:55:17.532:E / AndroidRuntime(1638):at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:779) 09-11 16:55:17.532:E / AndroidRuntime(1638):at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) 09-11 16:55:17.532:E / AndroidRuntime(1638):at dalvik.system.NativeStart.main(Native Method) 09-11 16:55:17.532:E / AndroidRuntime(1638):引起:java.lang.ClassCastException:android.widget.TextView无法强制转换为android.widget.Button 09-11 16:55:17.532:E / AndroidRuntime(1638):at com.example.datebutton.Main.onCreate(Main.java:24) 09-11 16:55:17.532:E / AndroidRuntime(1638):在android.app.Activity.performCreate(Activity.java:5231) 09-11 16:55:17.532:E / AndroidRuntime(1638):在android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087) 09-11 16:55:17.532:E / AndroidRuntime(1638):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2159) 09-11 16:55:17.532:E / AndroidRuntime(1638):... 11更多
答案 0 :(得分:0)
在尝试实例化按钮对象btn之前,您忘记添加以下行:setContentView(R.layout.activity);
。
答案 1 :(得分:0)
要在您的活动中使用布局,您必须将它们连接在一起。以下是您的代码的外观:
@Override
public void onCreate(Bundle b) {
super.onCreate(b);
setContentView(R.layout.activity);
btn = (Button) findViewById(R.id.btn1);
final String[] months = getResources().getStringArray(R.array.Months);
final TextView tv =(TextView)findViewById(R.id.text1);
btn.setOnClickListener(new View.OnClickListener(){
public void onClick(View v) {
int r, g, b;
int rand = (int) (Math.random() * 12);
tv.setText(months[rand]);
}
});
}