Mit For-Schleife ContentValue Arrays erzeugen

T

Tom Com

Fortgeschrittenes Mitglied
12
Hallo!
Ich wollte eine Test-APP erstellen, bei der man in ein Eingabefeld einen Namen und in ein anderes eine Telefonnummer eingibt. Drückt man einen Button kann man eine neue Nummer hinzufügen, drückt man nochmal noch eine Nummer... Anschließend wird alles in die Kontakte App eingetragen. Derzeit sieht meine Anwendung so aus:
MainActivity.java
Code:
package test.kontakte;

import android.app.ActionBar;
import android.app.Activity;
import android.content.ContentValues;
import android.content.Intent;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.text.InputType;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.TextView;

import java.util.ArrayList;

public class MainActivity extends Activity {

    EditText editText, editText2, editText3;
    Button button;
    Button button2;
    LinearLayout ll;
    int integer = 0;
    private static final int RQ = 1234;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        editText = (EditText)findViewById(R.id.editText);
        editText2 = (EditText)findViewById(R.id.editText2);
         ContentValues[] v2;
        ll = (LinearLayout)findViewById(R.id.ll);
        button = (Button)findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener()
       {
            @Override
            public void onClick(View v) {
                String name = editText.getText().toString();
                String number = editText2.getText().toString();
                Intent i = new Intent(Intent.ACTION_INSERT, ContactsContract.Contacts.CONTENT_URI);
                i.putExtra("finishActivityOnSaveCompleted", true);
                i.putExtra(ContactsContract.Intents.Insert.NAME, name);
                ArrayList<ContentValues> list = new ArrayList<ContentValues>();
                ContentValues v1 = new ContentValues();
                v1.put(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE);
                v1.put(ContactsContract.CommonDataKinds.Phone.NUMBER, number);
                v1.put(ContactsContract.CommonDataKinds.Phone.TYPE, ContactsContract.CommonDataKinds.Phone.TYPE_HOME);
                list.add(v1);
                if(integer > 0){
                    ContentValues[] v2 = new ContentValues[integer];
                        for(int integer2 = 1; integer2<integer; integer2++) {
                            int number2 = Integer.parseInt(editText3.getText().toString());
                            v2[integer2 - 1].put(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE);
                            v2[integer2 - 1].put(ContactsContract.CommonDataKinds.Phone.NUMBER, number2);
                            v2[integer2 - 1].put(ContactsContract.CommonDataKinds.Phone.TYPE, ContactsContract.CommonDataKinds.Phone.TYPE_HOME);
                            list.add(v2[integer2 - 1]);
                        }


                }
                //i.putExtra(ContactsContract.Intents.Insert.PHONE, number);
                //i.putExtra(ContactsContract.Intents.Insert.PHONE_TYPE, ContactsContract.CommonDataKinds.Phone.TYPE_HOME);
                i.putParcelableArrayListExtra(ContactsContract.Intents.Insert.DATA, list);
                startActivityForResult(i, RQ);
            }
        });
        button2 = (Button)findViewById(R.id.button2);
        button2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                integer++;
                editText3 = new EditText(MainActivity.this);
                editText3.setInputType(InputType.TYPE_CLASS_NUMBER);
                LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
                lp.setMargins(20, 30, 20, 0);
                ll.addView(editText3, lp);

            }
        });

    }
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data){
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == RQ){
            if (resultCode == RESULT_OK){
                if (data != null){
                    Intent in = new Intent(Intent.ACTION_VIEW, data.getData());
                    startActivity(in);
                }
            }
        }
    }

    @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);
    }
}

activity_main.xml
Code:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
    android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity"
    android:orientation="vertical"
    android:id="@+id/ll">

    <TextView android:text="@string/hello_world" android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/textView"
        android:textSize="@dimen/activity_vertical_margin" />

    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/editText"
        android:layout_below="@+id/textView"
        android:layout_alignParentStart="true"
        android:hint="@string/name" />

    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:inputType="phone"
        android:ems="10"
        android:id="@+id/editText2"
        android:layout_below="@+id/editText"
        android:layout_alignParentStart="true"
        android:layout_alignEnd="@+id/editText"
        android:hint="@string/number" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/button"
        android:id="@+id/button"
        android:layout_below="@+id/editText2"
        android:layout_alignParentStart="true" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/add"
        android:id="@+id/button2" />

    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:inputType="phone"
        android:ems="10"
        android:id="@+id/editText3"
        android:longClickable="false"
        android:visibility="invisible" />

</LinearLayout>

Doch da kriege ich dann folgende Fehlermeldung, wenn ich drei Nummern eingebe:
Code:
07-01 04:48:30.080    1894-1894/test.kontakte E/AndroidRuntime﹕ FATAL EXCEPTION: main
    Process: test.kontakte, PID: 1894
    java.lang.NullPointerException: Attempt to invoke virtual method 'void android.content.ContentValues.put(java.lang.String, java.lang.String)' on a null object reference
            at test.kontakte.MainActivity$1.onClick(MainActivity.java:59)
            at android.view.View.performClick(View.java:4780)
            at android.view.View$PerformClick.run(View.java:19866)
            at android.os.Handler.handleCallback(Handler.java:739)
            at android.os.Handler.dispatchMessage(Handler.java:95)
            at android.os.Looper.loop(Looper.java:135)
            at android.app.ActivityThread.main(ActivityThread.java:5257)
            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:903)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)

Was muss ich ändern, damit meine App läuft?
Danke für Antworten!
 
Ich glaube du hast V2 nicht initialisiert sondern nur das Array deklariert:

PHP:
if(integer > 0){
ContentValues[] v2 = new ContentValues[integer];
//jetzt arbeitest du sofort damit ohne initialisierung
for(int integer2 = 1; integer2<integer; integer2++) {
int number2 = Integer.parseInt(editText3.getText().toString());
v2[integer2 - 1].put(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE);
v2[integer2 - 1].put(ContactsContract.CommonDataKinds.Phone.NUMBER, number2);
v2[integer2 - 1].put(ContactsContract.CommonDataKinds.Phone.TYPE, ContactsContract.CommonDataKinds.Phone.TYPE_HOME);
list.add(v2[integer2 - 1]);
}


}

Vorschlag: Arraylist wo du die neuen Views einfach addest.
 
Zuletzt bearbeitet:
Kann man auch irgendwie das v2 array initialisieren?

Ich habe es jetzt mal so versucht:
Code:
if(integer > 0){
                   
                        for(int integer2 = 1; integer2<integer; integer2++) {
                            ContentValues values = new ContentValues();
                            int number2 = Integer.parseInt(editText3.getText().toString());
                            values.put(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE);
                            values.put(ContactsContract.CommonDataKinds.Phone.NUMBER, number2);
                            values.put(ContactsContract.CommonDataKinds.Phone.TYPE, ContactsContract.CommonDataKinds.Phone.TYPE_HOME);
                            list.add(values);
                        }
Jetzt wird aber immer nur die zuletzt eingegebene Nummer gewertet:crying:
 
Zuletzt bearbeitet:
Wei´ßt du cnith wie man Arrays initilisiert?

Object[] object=new Object[Integer];
for(int i=0;i<Integer;i++)
{
object=new Object();
}


Deine For schleife ist auch komisch...möchtest du cniht den letzten v2 in der Liste haben oder wie?

für mcih sollte die Schleife so aussehen
for(integer2=0;integer1<integer;integer2++)
{
v2[integer2]
...


oder aus "integer2<integer" ein "integer2<=integer" machen


dann könntest du einfach oben die Zeile v2[integer2]=new ContenValue();

platzieren und alles ist gut
 
Danke! Jetzt kommt die Fehlermeldung nicht mehr, aber wenn man mehrere Nummern eingibt dann erscheint immer nur die letzte. Ich denke der Fehler liegt daran, dass immer EditText3 überschrieben wird, oder?
Hier nochmals die onClick:
Code:
@Override
            public void onClick(View v) {
                integer++;
                editText3 = new EditText(MainActivity.this);
                editText3.setInputType(InputType.TYPE_CLASS_NUMBER);
                LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
                lp.setMargins(20, 30, 20, 0);
                ll.addView(editText3, lp);

            }
 
Ja das kannst du damit lösen indem du eine liste mit edittexts führst
 

Ähnliche Themen

Manny87
  • Manny87
Antworten
11
Aufrufe
166
swa00
swa00
B
Antworten
4
Aufrufe
494
bb321
B
FabianDev
Antworten
5
Aufrufe
559
swa00
swa00
Zurück
Oben Unten