Can';t从警报对话框中的分级栏获取值,并出现异常错误(Android)

Can';t从警报对话框中的分级栏获取值,并出现异常错误(Android),android,ratingbar,Android,Ratingbar,我有一个显示评级栏的alertdialog,动态创建评级栏并将其分配给警报对话框。当我触发onclick listener时,它显示NullPointerException。 如何在警报对话框的OK处理程序中获取评级值? 当我这样做时,我会得到一个空指针异常警告。因此,问题是如何获得评级值 谢谢 05-10 10:56:26.051: E/AndroidRuntime(8187): FATAL EXCEPTION: main 05-10 10:56:26.051: E/AndroidRu

我有一个显示评级栏的alertdialog,动态创建评级栏并将其分配给警报对话框。当我触发onclick listener时,它显示NullPointerException。 如何在警报对话框的OK处理程序中获取评级值? 当我这样做时,我会得到一个空指针异常警告。因此,问题是如何获得评级值

谢谢

05-10 10:56:26.051: E/AndroidRuntime(8187):     FATAL EXCEPTION: main
05-10 10:56:26.051: E/AndroidRuntime(8187):     Process: com.example.rsbuyclient, PID: 8187
05-10 10:56:26.051: E/AndroidRuntime(8187):     java.lang.NullPointerException
05-10 10:56:26.051: E/AndroidRuntime(8187):     at com.example.rsbuyclient.User_menu$SearchResultAdapter$3.onClick(User_menu.java:304)
05-10 10:56:26.051: E/AndroidRuntime(8187):     at android.view.View.performClick(View.java:4633)
05-10 10:56:26.051: E/AndroidRuntime(8187):     at android.view.View$PerformClick.run(View.java:19330)
05-10 10:56:26.051: E/AndroidRuntime(8187):     at android.os.Handler.handleCallback(Handler.java:733)
05-10 10:56:26.051: E/AndroidRuntime(8187):     at android.os.Handler.dispatchMessage(Handler.java:95)
05-10 10:56:26.051: E/AndroidRuntime(8187):     at android.os.Looper.loop(Looper.java:157)
05-10 10:56:26.051: E/AndroidRuntime(8187):     at android.app.ActivityThread.main(ActivityThread.java:5356)
05-10 10:56:26.051: E/AndroidRuntime(8187):     at java.lang.reflect.Method.invokeNative(Native Method)
05-10 10:56:26.051: E/AndroidRuntime(8187):     at java.lang.reflect.Method.invoke(Method.java:515)
05-10 10:56:26.051: E/AndroidRuntime(8187):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1265)
05-10 10:56:26.051: E/AndroidRuntime(8187):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081)
05-10 10:56:26.051: E/AndroidRuntime(8187):     at dalvik.system.NativeStart.main(Native Method)

爪哇


XML布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="2dip">  


<ImageView
    android:id="@+id/image"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginRight="5dp" />

<TextView
    android:id="@+id/text"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:textColor="#000000" 
    android:layout_toRightOf="@+id/image"/>/>

<TextView android:text="Please give rate" android:id="@+id/rank_dialog_text1"
     android:textSize="24dp" android:layout_marginTop="10dp"
     android:layout_width="wrap_content" android:layout_height="wrap_content" 
     android:layout_gravity="center"/>

 <RatingBar 
     android:layout_marginTop="10dp" android:layout_marginBottom="10dp"
     android:layout_width="wrap_content" android:layout_height="wrap_content"
     android:clickable="true"
     android:id="@+id/dialog_ratingbar" android:layout_gravity="center"
     android:numStars="5" android:stepSize="1.0" android:rating="2"
     android:isIndicator="false"/>

    <LinearLayout
    android:id="@+id/linearLayout1"
    android:layout_width="266dp"
    android:layout_height="wrap_content" >

 <Button
     android:id="@+id/dialogButtonOK"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:layout_margin="5dip"
     android:focusable="false"
     android:text="OK"
     android:textColor="#FFF8C6"
     android:textSize="20dip" />

  <Button
      android:id="@+id/dialogButtonNO"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_margin="5dip"
      android:focusable="false"
      android:text="NO"
      android:textColor="#FFF8C6"
      android:textSize="20dip" />

/>

您的评级对话框是对话框的一部分,因此您应该使用
dialog.findViewById
获取
评级栏的值

将相关行更改为以下内容:

...
dialog_ratingbar = (RatingBar) dialog.findViewById(R.id.dialog_ratingbar);
...
希望这能解决你的问题。

首先改变它

dialog_ratingbar = (RatingBar) findViewById(R.id.dialog_ratingbar);

//然后按此方式尝试在单击按钮时获取评级栏的值。

 String answerValue =null;
    Button dialogButtonOK = (Button) dialog.findViewById(R.id.dialogButtonOK); 

    dialog_ratingbar.setOnRatingBarChangeListener(new OnRatingBarChangeListener() {
                            public void onRatingChanged(RatingBar ratingBar,
                                    float rating, boolean fromUser) {
        answerValue = String.valueOf(ratingBar.getRating());// Get the Rating Here
                            }
                        });            
    dialogButtonOK.setOnClickListener(new OnClickListener(){
                    @Override
                    public void onClick(View v) {                                               
                        Toast.makeText(getApplicationContext(),"Your Selected Ratings  : " + answerValue,Toast.LENGTH_LONG).show();
                        dialog.dismiss(); 
                    }                   
                });

您正在获得评级栏,因为您正在使用活动类的findViewById

dialog_ratingbar = (RatingBar) dialog.findViewById(R.id.dialog_ratingbar);
同样,若你们想在点击按钮时获得额定值,那个么你们不必注册setOnRatingBarChangeListener,因为你们可以直接从额定值栏中获得值

dialog_ratingbar.getRating()
dialog_ratingbar = (RatingBar) dialog.findViewById(R.id.dialog_ratingbar);
dialog_ratingbar.getRating()