مطور تطبيق Android، منتقي الأرقام المخصص لمستوى API 8

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

  •  26-12-2019
  •  | 
  •  

سؤال

أحاول إنشاء منتقي أرقام مخصص للتطبيقات التي تتطلب الحد الأدنى من مستوى واجهة برمجة التطبيقات (API) 8، حتى الآن حصلت على هذا الرمز، إنه بسيط ولكني لا أعرف كيفية إصلاح هذا الخطأ الذي يظهر لي.

الكود حتى الآن هو هذا:

الحزمة com.example.symbol_temp;

import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends ActionBarActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Integer counter=0;
        Button add,sub;
        final TextView display;

        add = (Button) findViewById(R.id.plus);
        sub = (Button) findViewById(R.id.minus);
        display = (TextView) findViewById(R.id.showtemperature);

        add.setOnClickListener(new View.OnClickListener() {

            public void onClick(View v) {
            counter++;
            display.setText( "" + counter);
            }
        });

        sub.setOnClickListener(new View.OnClickListener() {

            public void onClick(View v) {
            counter--;
            display.setText( "" + counter);
            }
        });

        }

}

وXML هو هذا:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.symbol_temp.MainActivity$PlaceholderFragment" >

    <TextView
        android:id="@+id/showtemperature"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:textAppearance="?android:attr/textAppearanceLarge" />

    <Button
        android:id="@+id/minus"
        style="?android:attr/buttonStyleSmall"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_above="@+id/showtemperature"
        android:layout_centerHorizontal="true"
        android:text="+" 
        android:onClick="add"/>

    <Button
        android:id="@+id/plus"
        style="?android:attr/buttonStyleSmall"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/minus"
        android:layout_below="@+id/showtemperature"
        android:text="-" />

</RelativeLayout>

الحصول على هذا في LogCat:

04-14 13:31:59.222: E/AndroidRuntime(359): FATAL EXCEPTION: main
04-14 13:31:59.222: E/AndroidRuntime(359): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.symbol_temp/com.example.symbol_temp.MainActivity}: java.lang.NullPointerException
04-14 13:31:59.222: E/AndroidRuntime(359):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)
04-14 13:31:59.222: E/AndroidRuntime(359):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
04-14 13:31:59.222: E/AndroidRuntime(359):  at android.app.ActivityThread.access$2300(ActivityThread.java:125)
04-14 13:31:59.222: E/AndroidRuntime(359):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
04-14 13:31:59.222: E/AndroidRuntime(359):  at android.os.Handler.dispatchMessage(Handler.java:99)
04-14 13:31:59.222: E/AndroidRuntime(359):  at android.os.Looper.loop(Looper.java:123)
04-14 13:31:59.222: E/AndroidRuntime(359):  at android.app.ActivityThread.main(ActivityThread.java:4627)
04-14 13:31:59.222: E/AndroidRuntime(359):  at java.lang.reflect.Method.invokeNative(Native Method)
04-14 13:31:59.222: E/AndroidRuntime(359):  at java.lang.reflect.Method.invoke(Method.java:521)
04-14 13:31:59.222: E/AndroidRuntime(359):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
04-14 13:31:59.222: E/AndroidRuntime(359):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
04-14 13:31:59.222: E/AndroidRuntime(359):  at dalvik.system.NativeStart.main(Native Method)
04-14 13:31:59.222: E/AndroidRuntime(359): Caused by: java.lang.NullPointerException
04-14 13:31:59.222: E/AndroidRuntime(359):  at com.example.symbol_temp.MainActivity.onCreate(MainActivity.java:24)
04-14 13:31:59.222: E/AndroidRuntime(359):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
04-14 13:31:59.222: E/AndroidRuntime(359):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
04-14 13:31:59.222: E/AndroidRuntime(359):  ... 11 more

أعتقد أنني قمت بتغيير بعض الأشياء، السطر رقم 24 هو هذا:

add.setOnClickListener(new View.OnClickListener() {

شكرا لك على مساعدتك.

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

المحلول

من تعليقك و

tools:context="com.example.symbol_temp.MainActivity$PlaceholderFragment"

أفترض أن وجهات النظر تنتمي إلى fragment_main.xml.

أنت تضخيم التخطيط الخاطئ.وأنت تبحث عن العرض في التخطيط الخاطئ.

غير هذا

setContentView(R.layout.activity_main);

ل

setContentView(R.layout.fragment_main);

تغيير هذا أيضا

Integer counter=0;

ل

int counter; // primitive data type
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
     counter =0;

نصائح أخرى

يتم إعلان متغير العداد الخاص بك بطريقة داخل الطريقة التي لماذا عند محاولة القيام بها، انقل المتغيرات الخاصة بك أعلاه طريقة OnCreate.

ملحوظة:
تم نشر هذه الإجابة كإجابة للتعليق الذي نشره الشخص الذي طرح هذا السؤال.لقد نشرت هذا كإجابة للإيجاز

استخدم هذه الطريقة
protected void onSaveInstanceState(Bundle savedInstance) { super.onSaveInstanceState(savedInstance); savedInstance.putInt("myCounter",counter); }
ثم في

  onCreate(Bundle savedInstanceState){ 
  if(savedInstanceState != null)
  counter = savedInstanceState.getInt("myCounter")}


من saveInstance الذي يعد كائنًا من فئة Bundle، يمكنك استرداد القيمة المحفوظة الخاصة بك وتعيينها عند الإنشاء.تذكر أن تتحقق مما إذا كانت القيمة فارغة، لأنه إذا قمت بتشغيل تطبيقك لأول مرة، فقد لا يتم إنشاء مثيل للعداد الخاص بك بعد وسيطرح استثناءً.
أيضًا عند استرداد القيم المحفوظة، تأكد من عدم الكتابة فوقها.

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