2016-05-13 5 views
-1

Я начинаю разрабатывать Android, поэтому я создаю приложение для Android, использующее Eclipse на основе преобразования единиц грамматики, но оно не работает.onClick button Android

Концепция моего Android-приложения заключается в том, что я пользуюсь навигационным ящиком с тремя элементами: Главная (Accueil), Конвертер (Конвертирует) и О (Предложение). Итак, когда я нажал на опции конвертера, он должен показать фрагмент, который включает в себя преобразование грамм единиц. Когда я ввожу свое значение для преобразования и выбора единиц преобразования, которые я хочу, и когда я нажимаю кнопку «Конвертировать» (Convertir), приложение получает стек и закрывается.

Может ли кто-нибудь мне помочь, пожалуйста!

Это мой фрагмент класс:

package com.hw.converter; 

import android.os.Bundle; 
import android.app.Fragment; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ArrayAdapter; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.Spinner; 
import android.widget.TextView; 

public class ConverterFragment extends Fragment { 
    String[] units; 
    Spinner spn1, spn2; 
    EditText editValue; 
    TextView tvResult; 
    double value; 
    Button myBtn; 
    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     return inflater.inflate(R.layout.fragment_converter, container, false); 

    } 

    @Override 
    public void onViewCreated(View view, Bundle savedInstanceState) { 
     super.onViewCreated(view, savedInstanceState); 
     ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(getView().getContext(), 
       R.array.units, android.R.layout.simple_spinner_item); 
     adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
     spn1 = (Spinner)getView().findViewById(R.id.spnUnits1); 
     spn2 = (Spinner)getView().findViewById(R.id.spnUnits2); 
     units = getResources().getStringArray(R.array.units); 
     spn1.setAdapter(adapter); 
     spn2.setAdapter(adapter); 


    } 
    public void convertir(View view){ 
     String edit = editValue.getText().toString(); 
     if(edit == null || edit.isEmpty()) { 
      value = 0.0; 
     } else { 
      value = Double.parseDouble(edit); 
     } 
     tvResult = (TextView)getView().findViewById(R.id.tvResult); 
     int choix1 = spn1.getSelectedItemPosition(); 
     int choix2 = spn2.getSelectedItemPosition(); 
     switch(choix1){ 
     case 0:{ 
      switch(choix2){ 
      case 0: 
       tvResult.setText(value+" mg");break; 
      case 1: 
       value/=10; 
       tvResult.setText(value+" cg");break; 
      case 2: 
       value/=100; 
       tvResult.setText(value+" dg");break; 
      case 3: 
       value/=1000; 
       tvResult.setText(value+" g");break; 
      case 4: 
       value/=10000; 
       tvResult.setText(value+" dag");break; 
      case 5: 
       value/=100000; 
       tvResult.setText(value+" hg");break; 
      case 6: 
       value/=1000000; 
       tvResult.setText(value+" kg");break; 
      default: 
       tvResult.setText(value+" g");break; 
      }break;} 

     case 1:{ 
      switch(choix2){ 
      case 0: 
       value*=10; 
       tvResult.setText(value+" mg");break; 
      case 1: 
       editValue.setText(value+" cg");break; 
      case 2: 
       value/=10; 
       tvResult.setText(value+" dg");break; 
      case 3: 
       value/=100; 
       tvResult.setText(value+" g");break; 
      case 4: 
       value/=1000; 
       tvResult.setText(value+" dag");break; 
      case 5: 
       value/=10000; 
       tvResult.setText(value+" hg");break; 
      case 6: 
       value/=100000; 
       tvResult.setText(value+" kg");break; 
      default: 
       tvResult.setText(value+" g");break; 
      }break; 
      } 

     case 2:{ 
      switch(choix2){ 
      case 0: 
       value*=100; 
       tvResult.setText(value+" mg");break; 
      case 1: 
       value*=10; 
       tvResult.setText(value+" cg");break; 
      case 2: 
       tvResult.setText(value+" dg");break; 
      case 3: 
       value/=10; 
       tvResult.setText(value+" g");break; 
      case 4: 
       value/=100; 
       tvResult.setText(value+" dag");break; 
      case 5: 
       value/=1000; 
       tvResult.setText(value+" hg");break; 
      case 6: 
       value/=10000; 
       tvResult.setText(value+" kg");break; 
      default: 
       tvResult.setText(value+" g");break; 
      }break; 
     } 

     case 3:{ 
      switch(choix2){ 
      case 0: 
       value*=1000; 
       tvResult.setText(value+" mg");break; 
      case 1: 
       value*=100; 
       tvResult.setText(value+" cg");break; 
      case 2: 
       value*=10; 
       tvResult.setText(value+" dg");break; 
      case 3: 
       tvResult.setText(value+" g");break; 
      case 4: 
       value/=10; 
       tvResult.setText(value+" dag");break; 
      case 5: 
       value/=100; 
       tvResult.setText(value+" hg");break; 
      case 6: 
       value/=1000; 
       tvResult.setText(value+" kg");break; 
      default: 
       tvResult.setText(value+" g");break; 
      }break; 
      } 
     case 4: 
     {switch(choix2){ 
     case 0: 
      value*=10000; 
      tvResult.setText(value+" mg");break; 
     case 1: 
      value*=1000; 
      tvResult.setText(value+" cg");break; 
     case 2: 
      value*=100; 
      tvResult.setText(value+" dg");break; 
     case 3: 
      value*=10; 
      tvResult.setText(value+" g");break; 
     case 4: 
      tvResult.setText(value+" dag");break; 
     case 5: 
      value/=10; 
      tvResult.setText(value+" hg");break; 
     case 6: 
      value/=100; 
      editValue.setText(value+" kg");break; 
     default: 
      tvResult.setText(value+" g");break; 
     }break; 
     } 
     case 5:{ 
      switch(choix2){ 
      case 0: 
       value*=100000; 
       tvResult.setText(value+" mg");break; 
      case 1: 
       value*=10000; 
       tvResult.setText(value+" cg");break; 
      case 2: 
       value*=1000; 
       tvResult.setText(value+" dg");break; 
      case 3: 
       value*=100; 
       tvResult.setText(value+" g");break; 
      case 4: 
       value*=10; 
       tvResult.setText(value+" dag");break; 
      case 5: 
       tvResult.setText(value+" hg");break; 
      case 6: 
       value/=10; 
       tvResult.setText(value+" kg");break; 
      default: 
       tvResult.setText(value+" g");break; 
      }break; 
     } 
     case 6:{ 
      switch(choix2){ 
      case 0: 
       value*=1000000; 
       tvResult.setText(value+" mg");break; 
      case 1: 
       value*=100000; 
       tvResult.setText(value+" cg");break; 
      case 2: 
       value*=10000; 
       tvResult.setText(value+" dg");break; 
      case 3: 
       value*=1000; 
       tvResult.setText(value+" g");break; 
      case 4: 
       value*=100; 
       tvResult.setText(value+" dag");break; 
      case 5: 
       value*=10; 
       tvResult.setText(value+" hg");break; 
      case 6: 
       tvResult.setText(value+" kg");break; 
      default: 
       tvResult.setText(value+" g");break; 
      }break; 

     } 

     } 
    } 


} 

И это мой конвертер код макета:

<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/drawerLayout" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context="com.hw.converter.ConverterActivity" > 

    <ListView android:id="@+id/drawerList" 
     android:layout_width="240dp" 
     android:layout_height="match_parent" 
     android:entries="@array/mymenu" 
     android:layout_gravity="start"> 

    </ListView> 

    <RelativeLayout android:id="@+id/convertContent" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     > 

     <TextView 
      android:id="@+id/tvTitle" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_alignParentTop="true" 
      android:layout_centerHorizontal="true" 
      android:text="@string/tvTitle" 
      android:textAppearance="?android:attr/textAppearanceLarge" /> 
     <TextView 
      android:id="@+id/tv1" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_alignParentLeft="true" 
      android:layout_alignParentStart="true" 
      android:paddingTop="25dp" 
      android:layout_below="@id/tvTitle" 
      android:text="@string/tv1" 
      android:textAppearance="?android:attr/textAppearanceLarge" /> 

     <Spinner 
      android:id="@+id/spnUnits1" 
      android:layout_width="100dp" 
      android:layout_height="wrap_content" 
      android:layout_alignTop="@+id/tv1" 
      android:layout_marginLeft="41dp" 
      android:layout_marginStart="41dp" 
      android:layout_marginTop="30dp" 
      android:layout_toEndOf="@+id/tv1" 
      android:layout_toRightOf="@+id/tv1" 

       /> 

     <EditText 
      android:id="@+id/editQte" 
      android:layout_height="wrap_content" 
      android:layout_width="match_parent" 
      android:layout_below="@+id/tv1" 
      android:inputType="number" 
      android:hint="@string/editHint" 
      > 

     </EditText> 
     <Spinner 
      android:id="@+id/spnUnits2" 
      android:layout_width="100dp" 
      android:layout_height="wrap_content" 
      android:layout_alignTop="@+id/tv2" 
      android:layout_below="@+id/editQte" 
      android:layout_marginLeft="41dp" 
      android:layout_marginStart="41dp" 
      android:layout_marginTop="30dp" 
      android:layout_toEndOf="@+id/tv2" 
      android:layout_toRightOf="@+id/tv2" 
      /> 

     <TextView 
      android:id="@+id/tv2" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_alignParentLeft="true" 
      android:layout_alignParentStart="true" 
      android:paddingTop="25dp" 
      android:layout_marginTop="20dp" 
      android:layout_below="@id/tv1" 
      android:text="@string/tv2" 
      android:textAppearance="?android:attr/textAppearanceLarge" 
      /> 

     <Button 
      android:id="@+id/btnConvert" 
      android:layout_width="150dp" 
      android:layout_height="wrap_content" 
      android:layout_below="@+id/spnUnits2" 
      android:layout_marginTop="56dp" 
      android:layout_centerInParent="true" 
      android:text="@string/btnConvert" 
      android:onClick="com.hw.converter.ConverterFragment.convertir" /> 

     <TextView 
      android:id="@+id/tvResult" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_below="@+id/btnConvert" 
      android:layout_marginTop="24dp" 
      android:text="@string/tvResult" 
      android:layout_marginLeft="20dp" 
      android:layout_marginStart="20dp" 
      android:textAppearance="?android:attr/textAppearanceLarge" /> 

    </RelativeLayout> 



</android.support.v4.widget.DrawerLayout> 

Edit: Теперь журнал ошибок имеет смысл, вы можете помочь, пожалуйста! Это журнал ошибок, что я получаю после этого я изменил его:

05-13 10:30:29.972: E/AndroidRuntime(5621): FATAL EXCEPTION: main 
05-13 10:30:29.972: E/AndroidRuntime(5621): Process: com.hw.converter, PID: 5621 
05-13 10:30:29.972: E/AndroidRuntime(5621): java.lang.IllegalStateException: Could not find a method com.hw.converter.ConverterFragment.convertir(View) in the activity class com.hw.converter.MainActivity for onClick handler on view class android.widget.Button with id 'btnConvert' 
05-13 10:30:29.972: E/AndroidRuntime(5621):  at android.view.View$1.onClick(View.java:3864) 
05-13 10:30:29.972: E/AndroidRuntime(5621):  at android.view.View.performClick(View.java:4492) 
05-13 10:30:29.972: E/AndroidRuntime(5621):  at android.view.View$PerformClick.run(View.java:18568) 
05-13 10:30:29.972: E/AndroidRuntime(5621):  at android.os.Handler.handleCallback(Handler.java:733) 
05-13 10:30:29.972: E/AndroidRuntime(5621):  at android.os.Handler.dispatchMessage(Handler.java:95) 
05-13 10:30:29.972: E/AndroidRuntime(5621):  at android.os.Looper.loop(Looper.java:136) 
05-13 10:30:29.972: E/AndroidRuntime(5621):  at android.app.ActivityThread.main(ActivityThread.java:5021) 
05-13 10:30:29.972: E/AndroidRuntime(5621):  at java.lang.reflect.Method.invokeNative(Native Method) 
05-13 10:30:29.972: E/AndroidRuntime(5621):  at java.lang.reflect.Method.invoke(Method.java:515) 
05-13 10:30:29.972: E/AndroidRuntime(5621):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:827) 
05-13 10:30:29.972: E/AndroidRuntime(5621):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:643) 
05-13 10:30:29.972: E/AndroidRuntime(5621):  at dalvik.system.NativeStart.main(Native Method) 
05-13 10:30:29.972: E/AndroidRuntime(5621): Caused by: java.lang.NoSuchMethodException: com.hw.converter.ConverterFragment.convertir [class android.view.View] 
05-13 10:30:29.972: E/AndroidRuntime(5621):  at java.lang.Class.getConstructorOrMethod(Class.java:472) 
05-13 10:30:29.972: E/AndroidRuntime(5621):  at java.lang.Class.getMethod(Class.java:857) 
05-13 10:30:29.972: E/AndroidRuntime(5621):  at android.view.View$1.onClick(View.java:3857) 
05-13 10:30:29.972: E/AndroidRuntime(5621):  ... 11 more 
+1

Какую ошибку вы получили? – Jeffalee

+1

обмениваться журналом ошибок – Sishin

+1

'android: onClick' method - должен быть общедоступным и' View' как только параметр .. – Bharatesh

ответ

1

it4Astuces,

по умолчанию подписи действия OnClick кнопки должна быть

public void NameOfTheMethod(View view) { 
} 

Меняет ваш: до

public void convertir(View view){ 
} 

Вы не ввели свой журнал ошибок :) Tho Думаю, он должен сказать, что никакого метода «конвертир» не найдено. Это связано с тем, что андроид будет искать метод convertir, который принимает вид как параметр :)

public void convertir (View view) не такой же, как public void convertir(). Таким образом обновить свой метод, чтобы соответствовать требованиям андроида, и вы должны быть хорошо идти :)

EDIT на основе журнала регистрации ошибок вы выложили в комментарии я считаю, что причиной аварии является

value = Double.parseDouble(editValue.getText().toString()); 

Хотя я не могу быть уверен, как войти ошибка вы выложили нет особого смысла по крайней мере для меня :(вы можете изменить свой код, как следовать и Лемм знать, если он решает проблему

String editValue = editValue.getText().toString(); 
if(editValue == null || editValue.isEmpty()) { 
    value = 0.0; 
} else { 
    value = Double.parseDouble(editValue); 
} 

Null или эми Значения конфорок не considerred, как parceable в JAVA Double.parseDouble

Проблема должна быть решена :) С Днем кодирования

+0

Спасибо за ваш ответ, я изменил свой код, но он получает стек. Журнал ошибок показывает: threadid = 1: выход из потока с неперехваченным исключением (group = 0x9ccdeb20) – it4Astuces

+0

@ it4astuces: Что именно вы получаете? Не могли бы вы опубликовать журнал ошибок ??? –

+0

@ it4astuces: вы можете получить журнал ошибок в Eclipse, Goto Window-> Show View -> Other -> Android-> Logcat. Пожалуйста, проверьте экран, вы должны видеть много строк в красном цвете. Пожалуйста, разместите его здесь :) В любом случае бесплатное предложение: P Сменить на Android-студию ASAP :) –

0

XML файл

 <Button 
     android:id="@+id/btnConvert" 
     android:layout_width="150dp" 
     android:layout_height="wrap_content" 
     android:layout_below="@+id/spnUnits2" 
     android:layout_marginTop="56dp" 
     android:layout_centerInParent="true" 
     android:text="@string/btnConvert" 
     android:onClick="onClick" /> 

ваш главный файл

public class ConverterFragment extends Fragment { 
String[] units; 
Spinner spn1, spn2; 
EditText editValue; 
TextView tvResult; 
double value; 
Button myBtn; 

..... 
..... 


public void onClick(View view) 
{ 

//action you want on button clicked 
} 

}