يتعطل التطبيق عند استدعاء قيمة Spinner في الحساب؟

StackOverflow https://stackoverflow.com/questions/2136136

  •  22-09-2019
  •  | 
  •  

سؤال

import android.app.Activity;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.SpinnerAdapter;
import android.widget.TextView;

public class calctest extends Activity {
/** Called when the activity is first created. */
private EditText input; 
private EditText input2; 
private EditText input3; 
private EditText input4;
private TextView output;
private TextView output2;
private Spinner aperture;
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

 // Extract the text fields from the XML layout 
    input = (EditText) findViewById(R.id.input1); 
    input2 = (EditText) findViewById(R.id.input2);
    input3 = (EditText) findViewById(R.id.input3); 
    input4 = (EditText) findViewById(R.id.input4);
    output = (TextView) findViewById(R.id.result); 
    output2 = (TextView) findViewById(R.id.result2);

    //aperture dropdown
    final Spinner aperture = (Spinner) findViewById(R.id.apt);
    ArrayAdapter adapter = ArrayAdapter.createFromResource(
    this, R.array.apertures, android.R.layout.simple_spinner_item);
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    aperture.setAdapter(adapter);

    Spinner mode = (Spinner) findViewById(R.id.mode);
    ArrayAdapter adapter2 = ArrayAdapter.createFromResource(
    this, R.array.formats, android.R.layout.simple_spinner_item);
    adapter2.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    mode.setAdapter(adapter2);

    // Perform calculation when button is pushed

    final Button button = (Button) findViewById(R.id.calculate);
    button.setOnClickListener(new View.OnClickListener() {             
        public void onClick(View v) {                 
            doCalculation(aperture.getSelectedItem());
                }         
            });
        }


private void doCalculation(Object selectedItem) { 
    // Get entered input value 
    String cinput1 = input.getText().toString(); 
    String cinput2 = input2.getText().toString();
    String cinput3 = input3.getText().toString(); 
    String cinput4 = input4.getText().toString();
    Object cinput5 = aperture.getSelectedItem();
}

}

أعلم أن طريقة doCalculation لا تقوم فعليًا بحساب أي شيء حتى الآن، لأن التطبيق يتعطل بمجرد محاولة الحصول على قيمة الإدخال.إذا قمت بتعطيل خط cinput5، فإنه يعمل بشكل جيد.ما الخطأ الذي أفعله هنا؟وبناءً على هذه الملاحظة، كيف يمكنني تحويل قيمة القرص الدوار إلى سلسلة لاستخدامها في الحساب؟

وأيضاً كفحص مزدوج..يعرض الدوار قائمة من الأرقام (1.4، 2، 2.8، 4، 5.6، إلخ) وأي رقم يتم تحديده هو الرقم الذي أحتاج إلى استخدامه في الحساب.أنا أطلب القيمة الصحيحة من القرص الدوار، أليس كذلك؟

أعتذر عن الأخطاء الواضحة للغاية.لقد بدأت للتو Java وبعد الانتهاء من هذا التطبيق يعد سأحصل على كتاب!

هل كانت مفيدة؟

المحلول

أنت تعلن aperture مرتين، مرة في بداية التعليمات البرمجية الخاصة بك ومرة ​​أخرى داخل onCreate طريقة.

في هذا السطر:

final Spinner aperture = (Spinner) findViewById(R.id.apt);

حاول إزالة final Spinner.

عندما يصل التطبيق إلى السطر الأخير من طريقة doCalculation، فمن المرجح أن يرمي مرجع كائن فارغ لأنه يشير إلى مثيل الفتحة الخاصة الذي لم يتم إنشاء مثيل له بعد.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top