Android setContentView не применяется

1

Привет, я это reask предыдущего вопроса только потому, что я был неясно раньше. У меня есть json-канал, который состоит из того, что я нашел длину массива в нем. как он должен его производить. но то, что я пытаюсь сделать, - это добавить второй элемент, который нужно будет использовать в другом макете.

поэтому в настоящее время у меня есть строка, содержащая значение String YES, которое затем отправляется в намерение для дальнейшей работы, которая помещается внутри оператора if, который говорит, что если x = Yes, тогда используйте layout1, если x = no use layout2.

проблема, с которой я сталкиваюсь, - это когда я помещаю строку в оператор if и записываю ее в нее, но когда я ставил setContentView, и это заставляет приложение закрывать почему?

вот мой код

в 1-й деятельности

HttpResponse response = client.execute(post);
BufferedReader reader = new BufferedReader(new InputStreamReader(response.getEntity().getContent(), "UTF-8"));
String json = reader.readLine();

JSONObject obj = new JSONObject(json);


JSONObject objData = obj.getJSONObject("data");

JSONArray jArray = objData.getJSONArray("structure");

leagueCount = jArray.length();


if (leagueCount == 1){                   
   teamFeedStructure = "YES" ; 
}        
if (leagueCount == 2){
   teamFeedStructure = "NO" ; 
}                        

теперь намерение отправлено

Intent mainIntent = new Intent(firstActivity.this,secondActivity.class);

mainIntent.putExtra("leagueCount", teamFeedStructure);

firstActivity.this.startActivity(mainIntent);

firstActivity.this.finish();

теперь во втором мероприятии

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    //setContentView(R.layout.introact);

    String leagueCount = getIntent().getExtras().getString("leagueCount");

    //String leaguecount = String.valueOf(leagueCount);

    Log.v("lc", leagueCount);

    if (leagueCount == "YES"){

        String one = "one";
        setContentView(R.layout.introact);

        Log.v("lc", one);       
    }

    //if (leaguecount == "2"){

       //setContentView(R.layout.introact);
    //}

Ошибка

04-23 21:53:34.455: W/dalvikvm(954): threadid=1: thread exiting with uncaught exception (group=0x40015560)
04-23 21:53:34.465: E/AndroidRuntime(954): FATAL EXCEPTION: main
04-23 21:53:34.465: E/AndroidRuntime(954): java.lang.RuntimeException: Unable to start activity ComponentInfo{co.uk.fantasticmedia.TheEvoStikLeague/co.uk.fantasticmedia.TheEvoStikLeague.IntroActivity}: java.lang.NullPointerException
04-23 21:53:34.465: E/AndroidRuntime(954):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1647)
04-23 21:53:34.465: E/AndroidRuntime(954):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
04-23 21:53:34.465: E/AndroidRuntime(954):  at android.app.ActivityThread.access$1500(ActivityThread.java:117)
04-23 21:53:34.465: E/AndroidRuntime(954):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
04-23 21:53:34.465: E/AndroidRuntime(954):  at android.os.Handler.dispatchMessage(Handler.java:99)
04-23 21:53:34.465: E/AndroidRuntime(954):  at android.os.Looper.loop(Looper.java:130)
04-23 21:53:34.465: E/AndroidRuntime(954):  at android.app.ActivityThread.main(ActivityThread.java:3683)
04-23 21:53:34.465: E/AndroidRuntime(954):  at java.lang.reflect.Method.invokeNative(Native Method)
04-23 21:53:34.465: E/AndroidRuntime(954):  at java.lang.reflect.Method.invoke(Method.java:507)
04-23 21:53:34.465: E/AndroidRuntime(954):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
04-23 21:53:34.465: E/AndroidRuntime(954):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
04-23 21:53:34.465: E/AndroidRuntime(954):  at dalvik.system.NativeStart.main(Native Method)
04-23 21:53:34.465: E/AndroidRuntime(954): Caused by: java.lang.NullPointerException
04-23 21:53:34.465: E/AndroidRuntime(954):  at co.uk.fantasticmedia.TheEvoStikLeague.IntroActivity.onCreate(IntroActivity.java:45)
04-23 21:53:34.465: E/AndroidRuntime(954):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
04-23 21:53:34.465: E/AndroidRuntime(954):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)
04-23 21:53:34.465: E/AndroidRuntime(954):  ... 11 more
  • 0
    В чем ошибка?
  • 0
    Вы должны сравнить строки, используя метод .equals: if (leagueCount.equals ("YES"))
Показать ещё 5 комментариев
Теги:

1 ответ

2
Лучший ответ

Вы не можете использовать == для сравнения строк == будет сравнивать местоположение памяти, которое вам нужно сделать:

 if("1".equals(leaguecount))

Десять ошибок Программисты Java (см. Номер 7)

Сравнение вашей жестко закодированной строки "1" с методом equals (вместо something.equals("1") также экономит вам выполнение нулевой проверки \


Я думаю, ваша проблема в том, что вы отправляете null и не инициализируете свою строку. После того, как вы разобрали свой JSON, я сделал бы это так:

Здесь переписывается:

teamFeedStructure = "NO";
if (leagueCount >= 2){
   teamFeedStructure = "YES" ; 
}

Тогда ваша другая деятельность

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    String leagueCount = getIntent().getStringExtra("leagueCount");
    Log.d("lc", "Received league count of:"+ leagueCount);

    if ("YES".equals(leagueCount){
        setContentView(R.layout.introact);
        Log.d("lc", "Using league count of 2 or more layout");
    }else{
        setContentView(R.layout.introact_something_else);
        Log.d("lc", "Using default layout");
    }
 }
  • 0
    я добавил это, и оно все еще принудительно закрывает приложение
  • 0
    Если вы изменили свой onCreate так, чтобы он выглядел именно так, то нет возможности его принудительного закрытия. Единственное, у вас не будет этого макета R.layout.introact_something_else . В чем ошибка?
Показать ещё 7 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню