Приложение Android не запускается при запуске с 1 действием и 1 классомJAVA

Программисты JAVA общаются здесь
Anonymous
Приложение Android не запускается при запуске с 1 действием и 1 классом

Сообщение Anonymous »

Я хочу создать приложение, которое загружает изображения с Flickr. Чтобы построить это, у меня есть активность, содержащая 1 фрагмент.
Макет активности: Этот макет связан со следующим классом активности:

Код: Выделить всё

    package com.example.jonas.flickrfestival;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;

public class MainActivity extends Activity {

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

@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here.  The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();

//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}

return super.onOptionsItemSelected(item);
}
}
Макет фрагмента: фрагмент_main И связанный класс:

Код: Выделить всё

package com.example.jonas.flickrfestival;

import android.os.Bundle;
import android.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;

import com.example.jonas.flickrfestival.network.JsonHandler;

public class MainActivityFragment extends Fragment {

private String url;
private Button btnFetch;
private EditText txtSearch;

public MainActivityFragment(){
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {

btnFetch = (Button) getView().findViewById(R.id.btnSearch);
txtSearch = (EditText) container.findViewById(R.id.txtSearch);

btnFetch.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
JsonHandler handler = new JsonHandler();
handler.fetchImages(txtSearch.getText().toString());
}
});

return inflater.inflate(R.layout.fragment_main, container, false);
}
}
Хорошо, теперь проблема. Если я запускаю приложение на своем телефоне, оно сразу же аварийно завершает работу, и я получаю следующий вывод об ошибке:

Код: Выделить всё

    >     > 08-10 11:11:35.959  29470-29470/com.example.jonas.flickrfestival
>     > E/AndroidRuntime﹕ FATAL EXCEPTION: main
>     >     Process: com.example.jonas.flickrfestival, PID: 29470
>     >     java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.jonas.flickrfestival/com.example.jonas.flickrfestival.MainActivity}:
>     > android.view.InflateException: Binary XML file line #7: Error
>     > inflating class fragment
>     >             at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2331)
>     >             at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2391)
>     >             at android.app.ActivityThread.access$800(ActivityThread.java:151)
>     >             at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1309)
>     >             at android.os.Handler.dispatchMessage(Handler.java:102)
>     >             at android.os.Looper.loop(Looper.java:135)
>     >             at android.app.ActivityThread.main(ActivityThread.java:5349)
>     >             at java.lang.reflect.Method.invoke(Native Method)
>     >             at java.lang.reflect.Method.invoke(Method.java:372)
>     >             at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:908)
>     >             at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:703)
>     >      Caused by: android.view.InflateException: Binary XML file line #7: Error inflating class fragment
>     >             at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:763)
>     >             at android.view.LayoutInflater.rInflate(LayoutInflater.java:806)
>     >             at android.view.LayoutInflater.inflate(LayoutInflater.java:504)
>     >             at android.view.LayoutInflater.inflate(LayoutInflater.java:414)
>     >             at android.view.LayoutInflater.inflate(LayoutInflater.java:365)
>     >             at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:401)
>     >             at android.app.Activity.setContentView(Activity.java:2197)
>     >             at com.example.jonas.flickrfestival.MainActivity.onCreate(MainActivity.java:13)
>     >             at android.app.Activity.performCreate(Activity.java:6020)
>     >             at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105)
>     >             at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2284)
>     >             at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2391)
>     >             at android.app.ActivityThread.access$800(ActivityThread.java:151)
>     >             at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1309)
>     >             at android.os.Handler.dispatchMessage(Handler.java:102)
>     >             at android.os.Looper.loop(Looper.java:135)
>     >             at android.app.ActivityThread.main(ActivityThread.java:5349)
>     >             at java.lang.reflect.Method.invoke(Native Method)
>     >             at java.lang.reflect.Method.invoke(Method.java:372)
>     >             at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:908)
>     >             at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:703)
>     >      Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View
> android.view.View.findViewById(int)'
>     > on a null object reference
>     >             at com.example.jonas.flickrfestival.MainActivityFragment.onCreateView(MainActivityFragment.java:26)
>     >             at android.app.Fragment.performCreateView(Fragment.java:2062)
>     >             at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:870)
>     >             at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1045)
>     >             at android.app.FragmentManagerImpl.addFragment(FragmentManager.java:1147)
>     >             at android.app.FragmentManagerImpl.onCreateView(FragmentManager.java:2116)
>     >              at android.app.Activity.onCreateView(Activity.java:5369)
>     >             at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:733)
>     >             at android.view.LayoutInflater.rInflate(LayoutInflater.java:806)
>     >             at android.view.LayoutInflater.inflate(LayoutInflater.java:504)
>     >             at android.view.LayoutInflater.inflate(LayoutInflater.java:414)
>     >             at android.view.LayoutInflater.inflate(LayoutInflater.java:365)
>     >             at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:401)
>     >             at android.app.Activity.setContentView(Activity.java:2197)
>     >             at com.example.jonas.flickrfestival.MainActivity.onCreate(MainActivity.java:13)
>     >             at android.app.Activity.performCreate(Activity.java:6020)
>     >             at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105)
>     >             at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2284)
>     >             at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2391)
>     >             at android.app.ActivityThread.access$800(ActivityThread.java:151)
>     >             at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1309)
>     >             at android.os.Handler.dispatchMessage(Handler.java:102)
>     >             at android.os.Looper.loop(Looper.java:135)
>     >             at android.app.ActivityThread.main(ActivityThread.java:5349)
>     >             at java.lang.reflect.Method.invoke(Native Method)
>     >             at java.lang.reflect.Method.invoke(Method.java:372)
>     >             at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:908)
>     >             at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:703)
Итак, если я проверю свой код, проблемные строки находятся в классе фрагмента:

Код: Выделить всё

    > btnFetch = (Button) getView().findViewById(R.id.btnSearch);
>         txtSearch = (EditText) container.findViewById(R.id.txtSearch);
Поэтому, я думаю, контейнер имеет значение null. Но как я могу получить элементы макета представления?

Вернуться в «JAVA»