2016-06-18 3 views
0

SO versuche ich ein Kontakt-Manager-Modul für eine viel größere Android-App zu erstellen, und ich verwende ein Fragment in einem ViewPager, um die Kontakte in einer ListView anzuzeigen. Nun möchte ich, dass der Benutzer den Datensatz bearbeiten kann, indem er ein Element langklickt und "Bearbeiten" aus einem Listen-Alert-Dialog auswählt. Die Sache ist, ich möchte, dass die neue ContactEdit-Aktivität alle Felder für die Spalten in der Tabelle mit Informationen des bestimmten Datensatzes gefüllt hat, der in der ListView des vorherigen Fragments longClicked war. Ich habe die putExtra-Methode verwendet, um die Zeilen-ID des Datensatzes in die Absicht einzufügen, die ich zum Öffnen der Aktivität verwende. Aber am anderen Ende, als ich die Methode getIntent(). GetExtras(). GetInt() verwendet habe, wurde mir eine android.content.res.Resources $ NotFoundException zurückgegeben. Bitte werfen Sie einen Blick auf den entsprechenden Code und Fehlerprotokoll und versuchen, hier ein Lernender bro zu helfen ..

ContactList.class

package com.example.nikhil.test1; 
import android.app.AlertDialog; 
import android.content.DialogInterface; 
import android.content.Intent; 
import android.database.Cursor; 
import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.support.v4.widget.SimpleCursorAdapter; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.AdapterView; 
import android.widget.ListView; 



public class ContactList extends Fragment { 
    private SimpleCursorAdapter dataAdapter; 
    private ContactsAdapter dbHelper; 

    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     ViewGroup rootView = (ViewGroup) inflater.inflate(
       R.layout.fragment_item_list, container, false); 
     dbHelper = new ContactsAdapter(this.getActivity()); 
     dbHelper.open(); 
     Cursor cursor = dbHelper.getAllFriends(); 
     String[] columns = new String[] { 
       ContactsAdapter.KEY_NAME, ContactsAdapter.KEY_Phone 
     }; 
     int[] to = new int[] { 
       R.id.name, R.id.phonenumber 
     }; 
     dataAdapter = new SimpleCursorAdapter(
       this.getActivity(), R.layout.contact_row, 
       cursor, 
       columns, 
       to, 
       0); 
     ListView listView = (ListView) rootView.findViewById(R.id.list); 
     listView.setAdapter(dataAdapter); 
     listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() { 
      @Override 
      public boolean onItemLongClick(AdapterView<?> parent, View view, final int position, long id) { 
       AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); 
       builder.setTitle("Pick an action"); 
       builder.setItems(new String[]{"Edit","Delete","Activate Call Forwarding"}, new DialogInterface.OnClickListener() { 
        public void onClick(DialogInterface dialog, int which) { 
         if(which==0){ 
         Intent i = new Intent(getActivity(), ContactEdit.class); 
         i.putExtra("RowID",position); 
         startActivity(i); 
         } 

        } 
       }); 
       AlertDialog alertDialog=builder.create(); 
       alertDialog.show(); 
       return true; 
      } 
     }); 
     return rootView; 
    } 


} 

ContactEdit.class

package com.example.nikhil.test1; 
import android.app.Activity; 
import android.database.Cursor; 
import android.os.Bundle; 
import android.view.MenuItem; 
import android.support.v4.app.NavUtils; 
import android.widget.EditText; 


public class ContactEdit extends Activity { 
    ContactsAdapter dbHelper; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_contact_edit); 
     dbHelper = new ContactsAdapter(this); 
     dbHelper.open(); 


     if(getIntent() != null) { 
      Bundle extras = getIntent().getExtras(); 
      EditText _Name = (EditText) findViewById(R.id.edittextName); 
      _Name.setText(extras.getInt("RowID")); 
      /* int rowId = extras != null ? extras.getInt("RowID") : -1; 
      Cursor cursor = dbHelper.getFriend(rowId); 
      String name = cursor.getString(1); 
      String mobile = cursor.getString(2); 
      String home = cursor.getString(3); 
      String address = cursor.getString(4); 

      EditText _Name = (EditText) findViewById(R.id.edittextName); 
      _Name.setText(name); 
      EditText _Mobile = (EditText) findViewById(R.id.edittextMobile); 
      _Mobile.setText(mobile); 
      EditText _Home = (EditText) findViewById(R.id.edittextHome); 
      _Home.setText(home); 
      EditText _Address = (EditText) findViewById(R.id.edittextAddress); 
      _Address.setText(address);*/ 
     } 
     else 
     { 
      EditText _Name = (EditText) findViewById(R.id.edittextName); 
      _Name.setText(" "); 
      EditText _Mobile = (EditText) findViewById(R.id.edittextMobile); 
      _Mobile.setText(" "); 
      EditText _Home = (EditText) findViewById(R.id.edittextHome); 
      _Home.setText(" "); 
      EditText _Address = (EditText) findViewById(R.id.edittextAddress); 
      _Address.setText(" "); 
     } 


    } 



    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     int id = item.getItemId(); 
     if (id == android.R.id.home) { 

      NavUtils.navigateUpFromSameTask(this); 
      return true; 
     } 
     return super.onOptionsItemSelected(item); 
    } 
} 

Ich habe den eigentlichen beabsichtigten Code in den Kommentar eingefügt, so dass ich sehen konnte, ob sogar meine Aktivität die RowID aus dem Intent Loga extrahieren konnte t error log

06-18 15:49:45.676 18965-18965/? E/AndroidRuntime﹕ FATAL EXCEPTION: main 
    Process: com.example.nikhil.test1, PID: 18965 
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.nikhil.test1/com.example.nikhil.test1.ContactEdit}: android.content.res.Resources$NotFoundException: String resource ID #0x0 
      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2335) 
      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2397) 
      at android.app.ActivityThread.access$800(ActivityThread.java:151) 
      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1310) 
      at android.os.Handler.dispatchMessage(Handler.java:102) 
      at android.os.Looper.loop(Looper.java:135) 
      at android.app.ActivityThread.main(ActivityThread.java:5268) 
      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:902) 
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:697) 
    Caused by: android.content.res.Resources$NotFoundException: String resource ID #0x0 
      at android.content.res.Resources.getText(Resources.java:305) 
      at android.widget.TextView.setText(TextView.java:4152) 
      at com.example.nikhil.test1.ContactEdit.onCreate(ContactEdit.java:23) 
      at android.app.Activity.performCreate(Activity.java:6033) 
      at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106) 
      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2288) 
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2397) 
            at android.app.ActivityThread.access$800(ActivityThread.java:151) 
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1310) 
            at android.os.Handler.dispatchMessage(Handler.java:102) 
            at android.os.Looper.loop(Looper.java:135) 
            at android.app.ActivityThread.main(ActivityThread.java:5268) 
            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:902) 
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:697) 
+1

Sow Ihre activity_contact_edit.xml Datei – Vickyexpert

+0

Ich denke, das Problem in dieser Zeile ist: '_Name.setText (extras.getInt ("RowID"));' – Ironman

+0

versuchen, wie dieses _Name.setText (String.valueOf (Extras zu ändern .getInt ("ZeilenID"))); und ändere auch putExtra() wie i.putExtra ("rowId", (int) position); –

Antwort

1

diese Linie kann den Fehler verursachen:

_Name.setText(extras.getInt("RowID")); 

ersetzen Sie es mit:

_Name.setText(""+extras.getInt("RowID")); 

gerade hinzugefügt "" die ganze Zahl in einen String zu konvertieren. Probieren Sie es aus und sagen Sie es uns.