2014-01-15 68 views
0

我真的無法在這裏找到問題。該應用程序運行,我可以去add_form,但每當我嘗試保存聯繫人(整個事情是用法語寫的,抱歉)該應用程序只是崩潰。我會很感激一些幫助。當我嘗試添加聯繫人時,爲什麼我的應用崩潰

這裏是我的主

package com.example.address; 

import android.app.ListActivity; 
import android.content.Context; 
import android.content.Intent; 
import android.database.Cursor; 
import android.os.Bundle; 
import android.view.Menu; 
import android.view.MenuInflater; 
import android.view.MenuItem; 
import android.view.View; 
import android.view.ViewGroup; 
import android.view.LayoutInflater; 
import android.widget.AdapterView; 
import android.widget.CursorAdapter; 
import android.widget.ImageView; 
import android.widget.ListView; 
import android.widget.TextView; 

public class AddBook extends ListActivity { 
    public final static String ID_EXTRA="apt.tutorial._ID"; 
    Cursor model=null; 
    AddAdapter adapter=null; 
    AddHelper helper=null; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     helper=new AddHelper(this); 
     model=helper.getAll(); 
     startManagingCursor(model); 
     adapter=new AddAdapter(model); 
     setListAdapter(adapter); 
    } 

    @Override 
    public void onDestroy() { 
     super.onDestroy(); 

     helper.close(); 
    } 

    @Override 
    public void onListItemClick(ListView list, View view, 
                  int position, long id) { 
     Intent i=new Intent(AddBook.this, AddForm.class); 

     i.putExtra(ID_EXTRA, String.valueOf(id)); 
     startActivity(i); 
    } 


    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     new MenuInflater(this).inflate(R.menu.option, menu); 

     return(super.onCreateOptionsMenu(menu)); 
    } 


    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     if (item.getItemId()==R.id.add) { 
      startActivity(new Intent(AddBook.this, AddForm.class)); 

      return(true); 
     } 

     return(super.onOptionsItemSelected(item)); 
    } 

    class AddAdapter extends CursorAdapter { 
     AddAdapter(Cursor c) { 
      super(AddBook.this, c); 
     } 

     @Override 
     public void bindView(View row, Context ctxt, 
               Cursor c) { 
      AddHolder holder=(AddHolder)row.getTag(); 

      holder.populateFrom(c, helper); 
     } 

     @Override 
     public View newView(Context ctxt, Cursor c, 
               ViewGroup parent) { 
      LayoutInflater inflater=getLayoutInflater(); 
      View row=inflater.inflate(R.layout.row, parent, false); 
      AddHolder holder=new AddHolder(row); 

      row.setTag(holder); 

      return(row); 
     } 
    } 

    static class AddHolder { 
     private TextView nom=null; 
     private TextView prenom=null; 
     private ImageView icon=null; 

     AddHolder(View row) { 
      nom=(TextView)row.findViewById(R.id.nom); 
      prenom=(TextView)row.findViewById(R.id.prenom); 
     } 

     void populateFrom(Cursor c, AddHelper helper) { 
      nom.setText(helper.getNom(c)); 
      prenom.setText(helper.getPrenom(c)); 

      if (helper.getSexe(c).equals("male")) { 
       icon.setImageResource(R.drawable.male_hover); 
      } 
      else { 
       icon.setImageResource(R.drawable.female_hover); 
      } 
     } 
    } 
} 

下面是對形式

package com.example.address; 

import android.app.Activity; 
import android.database.Cursor; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.RadioGroup; 
import android.widget.TextView; 

public class AddForm extends Activity { 

    EditText nom=null; 
    EditText prenom=null; 
    EditText rue=null; 
    EditText ville=null; 
    EditText province=null; 
    EditText pays=null; 
    EditText tele=null; 
    EditText cell=null; 
    EditText siteweb=null; 
    EditText courriel=null; 

    RadioGroup sexes=null; 

    AddHelper helper=null; 
    String AddId=null; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.add_form); 

     helper=new AddHelper(this); 

     nom=(EditText)findViewById(R.id.nom); 
     rue=(EditText)findViewById(R.id.prenom); 
     ville=(EditText)findViewById(R.id.ville); 
     province=(EditText)findViewById(R.id.province); 
     pays=(EditText)findViewById(R.id.pays); 
     tele=(EditText)findViewById(R.id.tele); 
     cell=(EditText)findViewById(R.id.cell); 
     siteweb=(EditText)findViewById(R.id.siteweb); 
     courriel=(EditText)findViewById(R.id.courriel); 

     sexes=(RadioGroup)findViewById(R.id.sexe); 

     Button save=(Button)findViewById(R.id.save); 

     save.setOnClickListener(onSave); 

     AddId=getIntent().getStringExtra(AddBook.ID_EXTRA); 

     if (AddId!=null) { 
      load(); 
     } 
    } 

    @Override 
    public void onDestroy() { 
     super.onDestroy(); 

     helper.close(); 
    } 

    private void load() { 
     Cursor c=helper.getById(AddId); 

     c.moveToFirst();   
     nom.setText(helper.getNom(c)); 
     prenom.setText(helper.getPrenom(c)); 
     rue.setText(helper.getRue(c)); 
     ville.setText(helper.getVille(c)); 
     province.setText(helper.getProvince(c)); 
     pays.setText(helper.getPays(c)); 
     tele.setText(helper.getTele(c)); 
     cell.setText(helper.getCell(c)); 
     siteweb.setText(helper.getSiteweb(c)); 
     courriel.setText(helper.getCourriel(c)); 


     if (helper.getSexe(c).equals("male")) { 
      sexes.check(R.id.male); 
     } 
     else { 
      sexes.check(R.id.female); 
     } 

     c.close(); 
    } 

    private View.OnClickListener onSave=new View.OnClickListener() { 
     public void onClick(View v) { 
      String sexe=null; 

      switch (sexes.getCheckedRadioButtonId()) { 
       case R.id.male: 
        sexe="male"; 
        break; 
       case R.id.female: 
        sexe="female"; 
        break; 
      } 

      if (AddId==null) { 
       helper.insert(nom.getText().toString(), prenom.getText().toString(), sexe, rue.getText().toString(), 
           ville.getText().toString(), province.getText().toString(), pays.getText().toString(), 
           tele.getText().toString(), cell.getText().toString(), siteweb.getText().toString(), 
           courriel.getText().toString()); 
      } 
      else { 
       helper.update(AddId, nom.getText().toString(), prenom.getText().toString(), sexe, rue.getText().toString(), 
         ville.getText().toString(), province.getText().toString(), pays.getText().toString(), 
         tele.getText().toString(), cell.getText().toString(), siteweb.getText().toString(), 
         courriel.getText().toString()); 
      } 

      finish(); 
     } 
    }; 
} 

代碼數據庫

package com.example.address; 

import android.content.Context; 
import android.content.ContentValues; 
import android.database.Cursor; 
import android.database.SQLException; 
import android.database.sqlite.SQLiteOpenHelper; 
import android.database.sqlite.SQLiteDatabase; 
import android.database.sqlite.SQLiteQueryBuilder; 

class AddHelper extends SQLiteOpenHelper { 
    private static final String DATABASE_NAME="addbook.db"; 
    private static final int SCHEMA_VERSION=1; 

    public AddHelper(Context context) { 
     super(context, DATABASE_NAME, null, SCHEMA_VERSION); 
    } 

    @Override 
    public void onCreate(SQLiteDatabase db){ 
     db.execSQL("CREATE TABLE contacts (_id INTEGER PRIMARY KEY AUTOINCREMENT, nom TEXT, prenom TEXT, sexe TEXT, rue TEXT, ville TEXT, province TEXT, pays TEXT, tele TEXT, cell TEXT, siteweb TEXT, courriel TEXT);"); 
    } 
    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion){ 
     //no-op, since will not be called until 2nd schema 
     //version exists 
    } 

    public Cursor getAll() { 
     return(getReadableDatabase() 
       .rawQuery("SELECT _id, nom, prenom, sexe, rue, ville, province, pays, tele, cell, siteweb, courriel FROM contacts ORDER BY nom", 
         null)); 
    } 

    public void insert(String nom, String prenom, String sexe, String rue, String ville, String province, String pays, 
         String tele, String cell, String siteweb, String courriel){ 
     ContentValues cv=new ContentValues(); 

     cv.put("nom", nom); 
     cv.put("prenom", prenom); 
     cv.put("sexe", sexe); 
     cv.put("rue", rue); 
     cv.put("ville", ville); 
     cv.put("province", province); 
     cv.put("pays", pays); 
     cv.put("tele", tele); 
     cv.put("cell", cell); 
     cv.put("siteweb", siteweb); 
     cv.put("courriel", courriel); 

     getWritableDatabase().insert("contacts", "nom", cv); 
    } 

    public String getNom(Cursor c) { 
     return(c.getString(1)); 
    } 
    public String getPrenom(Cursor c) { 
     return(c.getString(2)); 
    } 
    public String getSexe(Cursor c) { 
     return(c.getString(3)); 
    } 
    public String getRue(Cursor c) { 
     return(c.getString(4)); 
    } 
    public String getVille(Cursor c) { 
     return(c.getString(5)); 
    } 
    public String getProvince(Cursor c) { 
     return(c.getString(6)); 
    } 
    public String getPays(Cursor c) { 
     return(c.getString(7)); 
    } 
    public String getTele(Cursor c) { 
     return(c.getString(8)); 
    } 
    public String getCell(Cursor c) { 
     return(c.getString(9)); 
    } 
    public String getSiteweb(Cursor c) { 
     return(c.getString(10)); 
    } 
    public String getCourriel(Cursor c) { 
     return(c.getString(11)); 
    } 

    public Cursor getById(String id) { 
      String[] args={id}; 

      return(getReadableDatabase() 
        .rawQuery("SELECT _id, nom, prenom, sexe, rue, ville, province, pays, tele, cell, siteweb, courriel FROM contacts WHERE _ID=?", 
         args)); 
    } 

    public void update(String id, String nom, String prenom, String sexe, String rue, String ville, String province, String pays, 
       String tele, String cell, String siteweb, String courriel) { 
     ContentValues cv=new ContentValues(); 
     String[] args={id}; 

     cv.put("nom", nom); 
     cv.put("prenom", prenom); 
     cv.put("sexe", sexe); 
     cv.put("rue", rue); 
     cv.put("ville", ville); 
     cv.put("province", province); 
     cv.put("pays", pays); 
     cv.put("tele", tele); 
     cv.put("cell", cell); 
     cv.put("siteweb", siteweb); 
     cv.put("courriel", courriel); 

     getWritableDatabase().update("contacts", cv, "_ID=?", 
       args); 
    } 

} 

代碼這裏是表單

XML文件
<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout android:layout_width="match_parent" 
    android:layout_height="wrap_content" xmlns:android="http://schemas.android.com/apk/res/android" android:background="@color/lemon"> 
<TableLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_marginLeft="5sp" 
    android:layout_marginRight="5sp" 
    android:stretchColumns="1" 
    > 

    <TableRow android:paddingTop="5sp" android:paddingBottom="5sp"> 
     <TextView android:text="@string/nom" android:textColor="@color/darkbrown" /> 
     <EditText android:layout_height="40sp" android:id="@+id/nom" android:background="@color/beige"/> 
    </TableRow> 
    <TableRow android:paddingBottom="5sp"> 
     <TextView android:text="@string/prenom" android:textColor="@color/darkbrown" /> 
     <EditText android:layout_height="40sp" android:id="@+id/prenom" android:background="@color/beige" /> 
    </TableRow> 
    <TableRow> 
     <TextView android:text="@string/sexe" android:textColor="@color/darkbrown" /> 
     <RadioGroup android:id="@+id/sexe" android:orientation="horizontal"> 
      <RadioButton android:id="@+id/male" android:layout_marginLeft="50sp" /> <!-- style="@style/male" --> 
      <RadioButton android:id="@+id/female" android:layout_marginLeft="40sp" /> <!-- style="@style/female" --> 
     </RadioGroup> 
    </TableRow> 
    <TableRow android:layout_marginTop="2sp"> 
     <TextView android:text="@string/rue" android:textColor="@color/darkbrown" /> 
     <EditText android:layout_height="30sp" android:id="@+id/rue" android:textSize="11dp" android:background="@color/beige" /> 
    </TableRow> 
    <TableRow android:layout_marginTop="2sp"> 
     <TextView android:text="@string/ville" android:textColor="@color/darkbrown"/> 
     <EditText android:layout_height="30sp" android:id="@+id/ville" android:textSize="11dp" android:background="@color/beige" /> 
    </TableRow> 
    <TableRow android:layout_marginTop="2sp"> 
     <TextView android:text="@string/province" android:textColor="@color/darkbrown" /> 
     <EditText android:layout_height="30sp" android:id="@+id/province" android:textSize="11dp" android:background="@color/beige" /> 
    </TableRow> 
    <TableRow android:layout_marginTop="2sp"> 
     <TextView android:text="@string/pays" android:textColor="@color/darkbrown" /> 
     <EditText android:layout_height="30sp" android:id="@+id/pays" android:textSize="11dp" android:background="@color/beige" /> 
    </TableRow> 
    <TableRow android:layout_marginTop="3sp" android:paddingBottom="3sp"> 
     <TextView android:text="@string/tele" android:textColor="@color/darkbrown" /> 
     <EditText android:layout_height="40sp" android:id="@+id/tele" android:background="@color/beige" /> 
    </TableRow> 
    <TableRow android:paddingBottom="3sp"> 
     <TextView android:text="@string/cell" android:textColor="@color/darkbrown" /> 
     <EditText android:layout_height="40sp" android:id="@+id/cell" android:background="@color/beige" /> 
    </TableRow> 
    <TableRow android:paddingBottom="3sp"> 
     <TextView android:text="@string/siteweb" android:textColor="@color/darkbrown"/> 
     <EditText android:layout_height="40sp" android:id="@+id/siteweb" android:background="@color/beige" /> 
    </TableRow> 
    <TableRow android:paddingBottom="3sp"> 
     <TextView android:text="@string/courriel" android:textColor="@color/darkbrown"/> 
     <EditText android:layout_height="40sp" android:id="@+id/courriel" android:background="@color/beige" /> 
    </TableRow> 
    <Button android:id="@+id/save" android:layout_width="fill_parent" 
     android:layout_height="35dp" android:text="@string/add" /> 
</TableLayout> 
</LinearLayout> 

這是你們要求的嗎?這就是logcat的給我

01-16 15:14:58.127: W/dalvikvm(793): threadid=1: thread exiting with uncaught exception (group=0x41465700) 
01-16 15:14:58.167: E/AndroidRuntime(793): FATAL EXCEPTION: main 
01-16 15:14:58.167: E/AndroidRuntime(793): java.lang.NullPointerException 
01-16 15:14:58.167: E/AndroidRuntime(793): at com.example.address.AddForm$1.onClick(AddForm.java:107) 
01-16 15:14:58.167: E/AndroidRuntime(793): at android.view.View.performClick(View.java:4240) 
01-16 15:14:58.167: E/AndroidRuntime(793): at android.view.View$PerformClick.run(View.java:17721) 
01-16 15:14:58.167: E/AndroidRuntime(793): at android.os.Handler.handleCallback(Handler.java:730) 
01-16 15:14:58.167: E/AndroidRuntime(793): at android.os.Handler.dispatchMessage(Handler.java:92) 
01-16 15:14:58.167: E/AndroidRuntime(793): at android.os.Looper.loop(Looper.java:137) 
01-16 15:14:58.167: E/AndroidRuntime(793): at android.app.ActivityThread.main(ActivityThread.java:5103) 
01-16 15:14:58.167: E/AndroidRuntime(793): at java.lang.reflect.Method.invokeNative(Native Method) 
01-16 15:14:58.167: E/AndroidRuntime(793): at java.lang.reflect.Method.invoke(Method.java:525) 
01-16 15:14:58.167: E/AndroidRuntime(793): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737) 
01-16 15:14:58.167: E/AndroidRuntime(793): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
01-16 15:14:58.167: E/AndroidRuntime(793): at dalvik.system.NativeStart.main(Native Method) 
01-16 15:15:00.978: I/Process(793): Sending signal. PID: 793 SIG: 9 
01-16 15:15:02.548: D/(836): HostConnection::get() New Host Connection established 0x2a1f78d8, tid 836 
+7

崩潰=>堆棧跟蹤。將其添加到您的問題。 –

+0

是的,添加一個Stacktrace,取自'adb logcat'輸出。 – Seidr

+0

logcat或它沒有發生 – DigCamara

回答

0

你需要把這些權限添加到Maifest.xml:

<uses-permission android:name="android.permission.READ_PHONE_STATE" />  
    <uses-permission android:name="android.permission.WRITE_CONTACTS" /> 
+0

看看堆棧跟蹤。這個例外與安全無關。 – Vaiden

+0

此答案已在發佈stacktrace之前發佈 – Sochimickox

+0

沒有問題。 – Vaiden

相關問題