2015-02-20 5 views
-2

Я пытаюсь создать свой собственный Android приложение, но у меня возникают ошибкиjava.lang.RuntimeException: Невозможно начать деятельность ComponentInfo {com.example.namecardlistview.MainActivity}: java.lang.NullPointerException

Logcat:

02-20 05:51:45.955: I/DB(2527): Database opened 
02-20 05:51:46.555: I/DB(2527): Returned 3 rows 
02-20 05:51:46.595: D/AndroidRuntime(2527): Shutting down VM 
02-20 05:51:46.647: W/dalvikvm(2527): threadid=1: thread exiting with uncaught exception (group=0x40a71930) 
02-20 05:51:46.666: E/AndroidRuntime(2527): FATAL EXCEPTION: main 
02-20 05:51:46.666: E/AndroidRuntime(2527): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.namecardlistview/com.example.namecardlistview.MainActivity}: java.lang.NullPointerException 
02-20 05:51:46.666: E/AndroidRuntime(2527):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180) 
02-20 05:51:46.666: E/AndroidRuntime(2527):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230) 
02-20 05:51:46.666: E/AndroidRuntime(2527):  at android.app.ActivityThread.access$600(ActivityThread.java:141) 
02-20 05:51:46.666: E/AndroidRuntime(2527):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234) 
02-20 05:51:46.666: E/AndroidRuntime(2527):  at android.os.Handler.dispatchMessage(Handler.java:99) 
02-20 05:51:46.666: E/AndroidRuntime(2527):  at android.os.Looper.loop(Looper.java:137) 
02-20 05:51:46.666: E/AndroidRuntime(2527):  at android.app.ActivityThread.main(ActivityThread.java:5041) 
02-20 05:51:46.666: E/AndroidRuntime(2527):  at java.lang.reflect.Method.invokeNative(Native Method) 
02-20 05:51:46.666: E/AndroidRuntime(2527):  at java.lang.reflect.Method.invoke(Method.java:511) 
02-20 05:51:46.666: E/AndroidRuntime(2527):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
02-20 05:51:46.666: E/AndroidRuntime(2527):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 
02-20 05:51:46.666: E/AndroidRuntime(2527):  at dalvik.system.NativeStart.main(Native Method) 
02-20 05:51:46.666: E/AndroidRuntime(2527): Caused by: java.lang.NullPointerException 
02-20 05:51:46.666: E/AndroidRuntime(2527):  at com.example.namecardlistview.MainActivity.refreshDisplay(MainActivity.java:65) 
02-20 05:51:46.666: E/AndroidRuntime(2527):  at com.example.namecardlistview.MainActivity.onCreate(MainActivity.java:46) 
02-20 05:51:46.666: E/AndroidRuntime(2527):  at android.app.Activity.performCreate(Activity.java:5104) 
02-20 05:51:46.666: E/AndroidRuntime(2527):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080) 
02-20 05:51:46.666: E/AndroidRuntime(2527):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144) 
02-20 05:51:46.666: E/AndroidRuntime(2527):  ... 11 more 
02-20 05:56:46.835: I/Process(2527): Sending signal. PID: 2527 SIG: 9 

MainActivity:

package com.example.namecardlistview; 

import java.util.List; 

import com.example.namecardlistview.NewActivity; 
import com.example.namecardlistview.DetailActivity; 
import com.example.namecardlistview.CardDataSource; 
import com.example.namecardlistview.R; 
import com.example.namecardlistview.NameCard; 
import android.widget.ListView; 
import android.app.ListActivity; 
import android.os.Bundle; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.AdapterView; 
import android.widget.ArrayAdapter; 
import android.widget.TextView; 
import android.widget.Toast; 
import android.widget.AdapterView.OnItemClickListener; 
import android.app.Activity; 
import android.content.Intent; 

public class MainActivity extends ListActivity { 

    CardDataSource datasource; 
    List<NameCard> cards; 
    Long cardID; 
    String cardName; 
    ListView listView; 

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


     datasource = new CardDataSource(this); 
     datasource.open(); 
     listView = (ListView) findViewById(R.id.listview); //getListView(); 
     //ViewGroup header = (ViewGroup) getLayoutInflater().inflate(R.layout.header, listView, false); 
     //listView.addHeaderView(header, null, false); 
     refreshDisplay(); 
     //setListAdapter(new ArrayAdapter<String>(this, R.layout.list_fruit,FRUITS)); 

     listView.setTextFilterEnabled(true); 
    } 

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

    private void refreshDisplay() { 
     cards = datasource.findAll(); 
     String[] cardArray= new String[cards.size()]; 
     for (int i=0; i<cards.size();i++) 
     { 
      cardArray[i]= cards.get(i).getName(); 
     } 
     listView.setAdapter(new ArrayAdapter<String>(this, R.layout.list_card,cardArray)); 
    } 

    @Override 
    protected void onListItemClick(ListView l, View v, int position, long id) { 
     // TODO Auto-generated method stub 
     super.onListItemClick(l, v, position, id); 
     position-=1; 
     cardID=cards.get(position).getId(); 
     cardName=cards.get(position).getName(); 
     Intent intent = new Intent(this,DetailActivity.class); 
     intent.putExtra("name", cards.get(position).getName()); 
     intent.putExtra("id", cards.get(position).getId()); 
     startActivityForResult(intent, 2); 

    } 
    public void addCard (MenuItem item){ 

     // Toast.makeText(this, "ok", Toast.LENGTH_SHORT).show(); 
     /* Fruit myFruit = new Fruit(); 
     myFruit.setTitle("Apple"); 
     myFruit.setDescription("apple is good"); 
     datasource.create(myFruit);*/ 
     Intent intent = new Intent(this,NewActivity.class); 
     startActivityForResult(intent, 1); 
    } 


    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     // TODO Auto-generated method stub 
    // Toast.makeText(this, "listenered activated", Toast.LENGTH_SHORT).show(); 
     super.onActivityResult(requestCode, resultCode, data); 
     if (resultCode==RESULT_OK) 
     { 
      //String mybenefit = data.getStringExtra("benefit"); 
      //fruit.setDescription(mybenefit); 

      refreshDisplay(); 

      Toast.makeText(this, cardName + " is added", Toast.LENGTH_SHORT).show(); 
     }else if (resultCode==10) 
     { 
      datasource.removeCard(cardID); 
      refreshDisplay(); 
      Toast.makeText(this, cardName +" is deleted", Toast.LENGTH_SHORT).show(); 
     }else if (resultCode==11) 
     { 

      refreshDisplay(); 
      Toast.makeText(this, cardName +" is updated", Toast.LENGTH_SHORT).show(); 
     } 
    } 

} 

Я только начал использовать StackOverflow, так что я понятия не имею, что я должен делать. , так что просто скажите мне, какой код вам нужен.

Кроме того, существует ли более простой способ создания кодового блока, кроме помещения четырех пространств для всех строк? EDIT: фига кладезь ярлыка -.- им идиот

EDIT:

CardDataSource:

package com.example.namecardlistview; 

import java.util.ArrayList; 
import java.util.List; 

import android.content.ContentValues; 
import android.content.Context; 
import android.database.Cursor; 
import android.database.sqlite.SQLiteDatabase; 
import android.database.sqlite.SQLiteOpenHelper; 
import android.util.Log; 

import com.example.namecardlistview.NameCard; 
import com.example.namecardlistview.CardDBOpenHelper; 

public class CardDataSource { 

public static final String LOGTAG="DB"; 

    private static final String[] allColumns = { 
     CardDBOpenHelper.COLUMN_ID, 
     CardDBOpenHelper.COLUMN_NAME, 
     CardDBOpenHelper.COLUMN_OCCUPATION, 
     CardDBOpenHelper.COLUMN_COMPANY, 
     CardDBOpenHelper.COLUMN_EMAIL, 
     CardDBOpenHelper.COLUMN_NUMBER, 
     CardDBOpenHelper.COLUMN_URL, 
     CardDBOpenHelper.COLUMN_SUMMARY, 
     CardDBOpenHelper.COLUMN_FAVOURITE}; 

    SQLiteOpenHelper dbhelper; 
    SQLiteDatabase database; 

    public CardDataSource(Context context) { 
     dbhelper = new CardDBOpenHelper(context); 
    } 

    public void open() { 
     Log.i(LOGTAG, "Database opened"); 
     database = dbhelper.getWritableDatabase(); 
    } 

    public void close() { 
     Log.i(LOGTAG, "Database closed");  
     dbhelper.close(); 
    } 

    public NameCard create(NameCard card) { 
     ContentValues values = new ContentValues(); 
     values.put(CardDBOpenHelper.COLUMN_NAME, card.getName()); 
     values.put(CardDBOpenHelper.COLUMN_COMPANY, card.getCompany()); 
     values.put(CardDBOpenHelper.COLUMN_EMAIL, card.getEmail()); 
     values.put(CardDBOpenHelper.COLUMN_FAVOURITE, card.isFavourite()); 
     values.put(CardDBOpenHelper.COLUMN_NUMBER, card.getPhone()); 
     values.put(CardDBOpenHelper.COLUMN_OCCUPATION, card.getOccupation()); 
     values.put(CardDBOpenHelper.COLUMN_SUMMARY, card.getSummary()); 
     values.put(CardDBOpenHelper.COLUMN_URL, card.getUrl()); 
     long insertid = database.insert(CardDBOpenHelper.TABLE_CARDS, null, values); 
     card.setId(insertid); 
     return card; 
    } 

    public NameCard update(NameCard card) { 
     ContentValues values = new ContentValues(); 
     values.put(CardDBOpenHelper.COLUMN_NAME, card.getName()); 
     database.update(CardDBOpenHelper.TABLE_CARDS, values, CardDBOpenHelper.COLUMN_ID+'=' + card.getId(), null); 
     return card; 
    } 

    public List<NameCard> findAll() { 
     List<NameCard> cards = new ArrayList<NameCard>(); 

     Cursor cursor = database.query(CardDBOpenHelper.TABLE_CARDS, allColumns, 
       null, null, null, null, null); 

     Log.i(LOGTAG, "Returned " + cursor.getCount() + " rows"); 
     if (cursor.getCount() > 0) { 
      while (cursor.moveToNext()) { 
       NameCard card = new NameCard(); 
       card.setId(cursor.getLong(cursor.getColumnIndex(CardDBOpenHelper.COLUMN_ID))); 
       card.setName(cursor.getString(cursor.getColumnIndex(CardDBOpenHelper.COLUMN_NAME))); 
       card.setCompany(cursor.getString(cursor.getColumnIndex(CardDBOpenHelper.COLUMN_COMPANY))); 
       card.setEmail(cursor.getString(cursor.getColumnIndex(CardDBOpenHelper.COLUMN_EMAIL))); 
       card.setFavourite(1 == cursor.getInt(cursor.getColumnIndex(CardDBOpenHelper.COLUMN_FAVOURITE))); 
       card.setOccupation(cursor.getString(cursor.getColumnIndex(CardDBOpenHelper.COLUMN_OCCUPATION))); 
       card.setPhone(cursor.getString(cursor.getColumnIndex(CardDBOpenHelper.COLUMN_NUMBER))); 
       card.setUrl(cursor.getString(cursor.getColumnIndex(CardDBOpenHelper.COLUMN_URL))); 
       card.setSummary(cursor.getString(cursor.getColumnIndex(CardDBOpenHelper.COLUMN_SUMMARY))); 
       cards.add(card); 
      } 
     } 
     Log.i(LOGTAG, "Going to return cards now"); 
     return cards; 
    } 

    public boolean removeCard(Long id) { 

     String where = CardDBOpenHelper.COLUMN_ID + "=" +id ; 
     int result = database.delete(CardDBOpenHelper.TABLE_CARDS, where, null); 
     return (result == 1); 
    } 

} 

list_card.xml:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" > 
<Listview 
    android:id="@+id/listview" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" /> 
</RelativeLayout> 
+0

Ваш код: –

+0

Где ваш код? – user3289108

+0

Вы можете показать свой код активности? –

ответ

2

Вы отсутствуете setContentView() метод в onCreate().

+0

После того, как я сделал это, я получил новую ошибку ???? 'java.lang.RuntimeException: Невозможно запустить Activity ComponentInfo {com.example.namecardlistview/com.example.namecardlistview.MainActivity}: java.lang.RuntimeException: ваш контент должен иметь ListView, чей атрибут id 'android.R.id .list ' ' – Zlaz

+1

изменить @ + id/listview в xml-файле на @android: id/list –

+0

Спасибо, ребята, так много! Вы, ребята, самые лучшие! – Zlaz

Смежные вопросы