Android Spinner上的Java NullPointerException

Android Spinner上的Java NullPointerException,java,android,Java,Android,我的Android应用程序上有一个旋转器和两个按钮 微调器是从服务器端脚本动态填充的 上次它可以工作,但我不知道为什么现在我有一个java.NullPointerException问题,我不知道如何修复它,LogCat的日志说我的微调器上有null 首先,这是我在FormPilihLokasiKelompok.class上的完整脚本 package com.nigmagrid.jm.demo; import java.util.ArrayList; import android.app.Ac

我的Android应用程序上有一个旋转器和两个按钮

微调器是从服务器端脚本动态填充的

上次它可以工作,但我不知道为什么现在我有一个java.NullPointerException问题,我不知道如何修复它,LogCat的日志说我的微调器上有null

首先,这是我在FormPilihLokasiKelompok.class上的完整脚本

package com.nigmagrid.jm.demo;

import java.util.ArrayList;

import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.Spinner;
import android.widget.Toast;
import android.widget.AdapterView.OnItemSelectedListener;

public class FormPilihLokasiKelompok extends Activity {

    ArrayList<String> content;
    ArrayAdapter<String> content_adapter;
    Button btn_save, btn_back;
    Context context;
    String selected_value, spinner_prompt, toast_failed, url_retrieval;
    Spinner spinner;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.form_pilih_lokasi_kelompok);

        btn_save = (Button) findViewById(R.id.btn_save);
        btn_back = (Button) findViewById(R.id.btn_back);
        spinner = (Spinner) findViewById(R.id.spinner);

        context = FormPilihLokasiKelompok.this;

        selected_value = "";
        spinner_prompt = "Pilih Lokasi";
        toast_failed = "Tidak ada lokasi yang terpilih";

        url_retrieval = VarsUrl.getServerAddress()+"get_list.php?table=kelompok_lokasi";

        content = new ArrayList<String>();

        btn_back.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View arg0) {
                finish();
            }
        });

        btn_save.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if(selected_value.length() > 1){
                    Intent intent = new Intent(getApplicationContext(), FormPilihLokasiKm.class);
                    intent.putExtra("content", selected_value);
                    startActivity(intent);
                }else{
                    Toast.makeText(getApplicationContext(), toast_failed, Toast.LENGTH_SHORT).show();
                }
            }
        });

        spinner.setPrompt(spinner_prompt);
        spinner.setOnItemSelectedListener(new OnItemSelectedListener() {

            @Override
            public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
                String sel_val = spinner.getSelectedItem().toString();
                if(sel_val != null || sel_val.length() > 0){
                    selected_value = spinner.getSelectedItem().toString();
                }
            }

            @Override
            public void onNothingSelected(AdapterView<?> arg0) {
                // do nothing
            }

        });

        new PopulateSpinner().execute(url_retrieval);

    }

    protected class PopulateSpinner extends AsyncTask<String, Void, String>{

        ProgressDialog pd = new ProgressDialog(context);

        protected void onPreExecute(){
            pd.setMessage("Mengambil data...");
        }

        @Override
        protected String doInBackground(String... arg0) {
            try{
                String response = CustomHttpClient.excecuteHttpGet(arg0[0]);
                String res = response.toString().trim();
                return res;             
            }catch (Exception e){
                return e.toString();
            }
        }

        protected void onPostExecute(String res){
            String[] datanya = res.split("#", 0);
            int jumlah_data = datanya.length;
            if(datanya[0].equals("1")){
                try{
                    content.clear();
                    for(int i = 1; i < jumlah_data; i++){
                        content.add(datanya[i]);
                    }

                    content_adapter = new ArrayAdapter<String>(context, android.R.layout.simple_spinner_item, content);
                    content_adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
                    spinner.setAdapter(content_adapter);

                }catch(Exception e){
                    Toast.makeText(getApplicationContext(), "Terjadi kesalahan sistem\n"+e.toString(), Toast.LENGTH_SHORT).show();
                }
            }else{
                content.add("Tidak ada data untuk ditampilkan");                
            }

            content_adapter = new ArrayAdapter<String>(context, android.R.layout.simple_spinner_item, content);
            content_adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
            spinner.setAdapter(content_adapter);

            pd.dismiss();
        }
    }

}
该脚本位于第68行:spinner.setPrompt(spinner\u prompt)

我已经将微调器提示更改为普通字符串,如“测试提示”,但它仍然是一样的 所以它一定是旋转器(cmiiw),我不知道应该在哪里修理它

有人知道怎么修吗? 谢谢

更新 这是我的布局

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

    <LinearLayout
        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content">

        <TextView 
            android:text="Lokasi"
            android:padding="5dip"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content" />
        <Spinner
            android:id="@+id/spinner"
            android:padding="5dip"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content" />
        <Button
            android:id="@+id/btn_save"
            android:text="Lanjutkan"
            android:padding="5dip"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content" />

        <Button
            android:id="@+id/btn_back"
            android:text="Kembali"
            android:padding="5dip"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content" />

    </LinearLayout>
</ScrollView>

您的微调器为空,这只能意味着一件事:微调器为空

您是否调试到引发异常的那一行,以验证微调器是否为null


调试时,在这一行:
spinner=(spinner)findViewById(R.id.spinner)-->之后微调器是否仍然为空?如果是,则可能是R.id.spinner拼写错误,或者在您使用的视图中不存在。

请确保在布局xml文件中确实使用正确的id定义了微调器。您可能意外地修改了布局。此外,您的布局可能有多个文件夹(例如布局和布局地)。在横向中,xml将从后一个文件夹加载。因此,您的代码可以在纵向模式下工作,但不能在横向模式下工作。

也许您需要重新生成R.java文件。。。使用eclipse,转到“Project->Clean”并选择您的项目。然后再次构建您的项目。也许您甚至需要在这些步骤中重新启动eclipse


我曾经遇到过这样的问题,之前它工作正常,但在我做了一些不相关的事情后突然停止工作

似乎微调器为空,而不是提示。我可以请你分享你的“form_pilih_lokasi_kelompok.xml”代码吗?所以只需对第68行进行注释,您仍然会在第69行得到异常。这里的关键是你提到了“上次它起作用了”。当您没有更改代码中的任何内容时,如果您的程序以不同的方式运行,则可能不是代码。(这种情况也有例外,主要是当你有线程时,你会遇到一些奇怪的错误,你无法一致地重现。但是在这种情况下,由于是android视图,首先要检查的合乎逻辑的事情是清理你的代码)
<?xml version="1.0" encoding="utf-8"?>
<ScrollView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <LinearLayout
        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content">

        <TextView 
            android:text="Lokasi"
            android:padding="5dip"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content" />
        <Spinner
            android:id="@+id/spinner"
            android:padding="5dip"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content" />
        <Button
            android:id="@+id/btn_save"
            android:text="Lanjutkan"
            android:padding="5dip"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content" />

        <Button
            android:id="@+id/btn_back"
            android:text="Kembali"
            android:padding="5dip"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content" />

    </LinearLayout>
</ScrollView>