有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

安卓 java。lang.RuntimeException:无法启动活动

下载我的应用程序的一个人通过google play向我发送了一个崩溃消息。我发现它与锡崩溃和anr。但我不知道这有什么问题。对我来说,它总是有效的,所以我不知道这里有什么问题。这是logcat:

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.laurenswuyts.find.it/com.laurenswuyts.find.it.MainKeyboard}: java.lang.NullPointerException
at 安卓.app.ActivityThread.performLaunchActivity(ActivityThread.java:2059)
at 安卓.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084)
at 安卓.app.ActivityThread.access$600(ActivityThread.java:130)
at 安卓.app.ActivityThread$H.handleMessage(ActivityThread.java:1195)
at 安卓.os.Handler.dispatchMessage(Handler.java:99)
at 安卓.os.Looper.loop(Looper.java:137)
at 安卓.app.ActivityThread.main(ActivityThread.java:4745)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.安卓.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
at com.安卓.internal.os.ZygoteInit.main(ZygoteInit.java:553)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.NullPointerException
at java.util.Arrays$ArrayList.<init>(Arrays.java:38)
at java.util.Arrays.asList(Arrays.java:154)
at 安卓.widget.ArrayAdapter.<init>(ArrayAdapter.java:128)
at com.laurenswuyts.find.it.MainKeyboard.onCreate(MainKeyboard.java:102)
at 安卓.app.Activity.performCreate(Activity.java:5008)
at 安卓.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079)
at 安卓.app.ActivityThread.performLaunchActivity(ActivityThread.java:2023)
... 11 more

这是我的代码:

package com.laurenswuyts.find.it;

import java.util.Locale;

import com.laurenswuyts.find.it.R;

import 安卓.app.Activity;
import 安卓.content.Intent;
import 安卓.net.Uri;
import 安卓.os.Bundle;
import 安卓.view.KeyEvent;
import 安卓.view.Menu;
import 安卓.view.MenuItem;
import 安卓.view.View;
import 安卓.view.Window;
import 安卓.view.inputmethod.EditorInfo;
import 安卓.widget.AdapterView;
import 安卓.widget.AdapterView.OnItemClickListener;
import 安卓.widget.ArrayAdapter;
import 安卓.widget.AutoCompleteTextView;
import 安卓.widget.ImageButton;
import 安卓.widget.TextView;

public class MainKeyboard extends Activity {
public String[] taal;
String[] StringDA = Languages.StringDA;
String[] StringDE = Languages.StringDE;
String[] StringFR = Languages2.StringFR;
String[] StringNL = Languages.StringNL;
String[] StringEN = Languages.StringEN;
String[] StringPT = Languages2.StringPT;
String[] StringSV = Languages.StringSV;
String[] StringES = Languages2.StringES;
String[] StringNO = Languages2.StringNO;

public ImageButton Search;

public AutoCompleteTextView AutoCompleteTextView;

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





       Search =  (ImageButton) findViewById(R.id.imageButtonSearch);         

       final AutoCompleteTextView AutoCompleteTextView = (AutoCompleteTextView)
                findViewById(R.id.autoCompleteTextView1);
       if (Locale.getDefault().getLanguage().equals("da")) {
           taal = StringDA;
       }
       else{}
       if (Locale.getDefault().getLanguage().equals("de")) {
           taal = StringDE;
       }
       else{}
       if (Locale.getDefault().getLanguage().equals("fr")) {
           taal = StringFR;
       }
       else{}
       if (Locale.getDefault().getLanguage().equals("nl")) {
           taal = StringNL;
       }
       else{}
       if (Locale.getDefault().getLanguage().equals("no")) {
           taal = StringNO;
       }
       else{}
       if (Locale.getDefault().getLanguage().equals("pt")) {
           taal = StringPT;
       }
       else{}
       if (Locale.getDefault().getLanguage().equals("es")) {
           taal = StringES;
       } 
       else{}
       if (Locale.getDefault().getLanguage().equals("sv")) {
           taal = StringSV;
       }
       else{}
       if (Locale.getDefault().getLanguage().equals("en")) {
           taal = StringEN;
       }
       else{

       }

       Search.setOnClickListener(new View.OnClickListener() {
              public void onClick(View v) {
                  Intent intent = new Intent(MainKeyboard.this,MainActivity.class);
               intent.putExtra("thetext",AutoCompleteTextView.getText().toString());
               startActivity(intent);
              }
          });

       ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,R.layout.suggest, taal);

       AutoCompleteTextView acTextView = (AutoCompleteTextView)findViewById(R.id.autoCompleteTextView1);
       acTextView.setThreshold(1);
       acTextView.setAdapter(adapter);
       acTextView.setOnItemClickListener(new OnItemClickListener() {
           public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
               Intent intent = new Intent(MainKeyboard.this,MainActivity.class);
               intent.putExtra("thetext",AutoCompleteTextView.getText().toString());
               startActivity(intent);
           }
       });
                AutoCompleteTextView.setOnEditorActionListener(new TextView.OnEditorActionListener() {
                        public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
                            if (actionId == EditorInfo.IME_ACTION_SEARCH) {
                                Intent intent = new Intent(MainKeyboard.this,MainActivity.class);
                                intent.putExtra("thetext",AutoCompleteTextView.getText().toString());
                                startActivity(intent);
                                return true;
                            }
                            return false;
                        }
                    });

   }

   @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
        case R.id.twitter:     Uri uri = Uri.parse("http://twitter.com/finditwurens");
         Intent intent = new Intent(Intent.ACTION_VIEW, uri);
         startActivity(intent);
         break;
      case R.id.facebook:     Uri uri2 = Uri.parse("http://www.facebook.com/AppFindIt");
         Intent intent2 = new Intent(Intent.ACTION_VIEW, uri2);
         startActivity(intent2);
         break;
      case R.id.googleplus: Uri uri3 = Uri.parse("http://plus.google.com/105389501412708876212/posts");
         Intent intent3 = new Intent(Intent.ACTION_VIEW, uri3);
         startActivity(intent3);
         break;
      case R.id.addgoogle: Uri uri4 = Uri.parse("http://www.google.com/places/");
         Intent intent4 = new Intent(Intent.ACTION_VIEW, uri4);
         startActivity(intent4);    
         break;
        }
        return true;
    }


            }

共 (5) 个答案

  1. # 1 楼答案

    替换以下代码:

    if (Locale.getDefault().getLanguage().equals("en")) {
        taal = StringEN;
    }
    else{
    }
    

    关于这一点:

    if (taal == null) {
        taal = StringEN;
    }
    

    这样,如果您不支持用户特定的语言,则将英语设置为默认语言

  2. # 2 楼答案

    -您实际上从未初始化数组,public String[] taal;

    -其次,我想请您使用ArrayList<String>而不是Array,因为CollectionsArrays灵活得多

  3. # 3 楼答案

    您的String[] taal;似乎是null;(没有一个if/else可以满足要求,请打印并通过记录Locale.getDefault().getLanguage()查看您的设备使用的是哪种语言,这可能会提供一些线索,说明为什么没有一个if/else满足要求)

    到控制到达的时间

    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,R.layout.suggest, taal);
    

    导致java.lang.NullPointerException

    确保taal非空

  4. # 4 楼答案

    您的条件都不正确,我建议您在else语句中设置默认语言:

    if (Locale.getDefault().getLanguage().equals("da")) {
               taal = StringDA;
           }
           else{}
           if (Locale.getDefault().getLanguage().equals("de")) {
               taal = StringDE;
           }
           else{}
           if (Locale.getDefault().getLanguage().equals("fr")) {
               taal = StringFR;
           }
           else{}
           if (Locale.getDefault().getLanguage().equals("nl")) {
               taal = StringNL;
           }
           else{}
           if (Locale.getDefault().getLanguage().equals("no")) {
               taal = StringNO;
           }
           else{}
           if (Locale.getDefault().getLanguage().equals("pt")) {
               taal = StringPT;
           }
           else{}
           if (Locale.getDefault().getLanguage().equals("es")) {
               taal = StringES;
           } 
           else{}
           if (Locale.getDefault().getLanguage().equals("sv")) {
               taal = StringSV;
           }
           else{}
           if (Locale.getDefault().getLanguage().equals("en")) {
               taal = StringEN;
           }
           else{
               taal = StringEN; //or whatever default language
           }
    
  5. # 5 楼答案

    问题是,设备的长度与您正在考虑的不一样

    尝试将youttaal变量初始化为默认语言String []