0

Hi i want to get userName in Start.java and show it in Welcom.java whit sqlite databas, but when i click on button i get error in genymotion: Unfortunately, Test has stopped. can anyone help me?

Start Activity:

package com.iran.test;

import android.app.Activity;
import android.content.Intent;
import android.database.Cursor;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class Start extends Activity {

    EditText name;
    Button save;

    DataBase database;

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

        name = (EditText) findViewById(R.id.name_edittext);
        save = (Button) findViewById(R.id.add_button);
        save.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                String getName = "";
                database = new DataBase(getBaseContext());
                database.open();
                Cursor C = database.insertData(getName);
                getName = C.getString(0);       

                Intent intent = new Intent(Start.this, Welcome.class);
                Bundle extras = new Bundle();
                extras.putString("data", getName); 
                intent.putExtras(extras);
                startActivity(intent);

                Toast.makeText(getApplicationContext(), "Data Saved.", Toast.LENGTH_LONG).show();
                database.close();

                Thread thread = new Thread() {
                    public void run() {
                        try {
                            sleep(3000);
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                    } 
                };
                thread.start();
            }
        });
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.start, 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();
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }
}

DataBase :

package com.iran.test;

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

public class DataBase {

    public static final String NAME = "name";
    public static final String TABLE_NAME = "mytable";
    public static final String DATA_BASE_NAME = "data_base_name";
    public static final int DATABASE_VERSION = 1;
    public static final String TABLE_CREATE = "create table mytable (name text not null, surname text not null);";

    DataBaseHelper dbhelper;
    SQLiteDatabase db;
    Context context;

    public DataBase(Context context) {
        this.context = context;
        dbhelper = new DataBaseHelper(context);
    }

    private static class DataBaseHelper extends SQLiteOpenHelper {  

        public DataBaseHelper(Context context) {
            super(context, DATA_BASE_NAME, null, DATABASE_VERSION);
        }

        @Override
        public void onCreate(SQLiteDatabase db) {

            try {
                db.execSQL(TABLE_CREATE);
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }

        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
            // TODO Auto-generated method stub
            db.execSQL("DROP TABLE IF EXIST mytable");
            onCreate(db);
        }
    }

    public DataBase open() {
        db = dbhelper.getWritableDatabase();
        return this;
    }

    public void close() {
        dbhelper.close();
    }

    public long insertData(String name, String surname) {
        ContentValues content = new ContentValues();
        content.put(NAME, name);
        return db.insertOrThrow(TABLE_NAME, null, content);
    }

    public Cursor insertData(String name) {
        return db.query(TABLE_NAME, new String[] {NAME}, null, null, null, null,null);
    }
}

Welcome Activity:

package com.iran.test;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.widget.TextView;

public class Welcome extends Activity {

    DataBase database;
    TextView tv;

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

        Intent intent = getIntent();
        String data = intent.getExtras().getString("data");


        tv = (TextView) findViewById(R.id.textView1);
        tv.setText("Hello " + data);
    }
}
Fazel
  • 23
  • 6

2 Answers2

0

Maybe you should read the text in name first, otherwise you are looking for a blank string:

String getName = name.getText();

And change the insertName method, because it isn't inserting anything, and you are not giving a surname, I'd guess name and surname are separated by a blank space:

public Cursor insertData(String name) {
    String[] data = name.split(" ");
    db.execSQL("INSERT INTO mytable (name, surname) VALUES "+data[0] + " "+data[1]);
    return db.query(TABLE_NAME, new String[] {NAME}, null, null, null, null,null);
}

BTW, you don't need that thread if you return START_STICKY, the activity will be alive while the previous one that created this it is alive

Ale
  • 76
  • 9
0

May be you are getting NullPointerException, for below line:

getName = C.getString(0);

Currently your insertData() is not able to insert anything. So your table is empty and that causing this exception.

Update insertData() as below:

public Cursor insertData(String name) {

    ContentValues values = new ContentValues();
    values.put(NAME, name);

    // Insert
    db.insert(TABLE_NAME, null, values);

    return db.query(TABLE_NAME, new String[] {NAME}, null, null, null, null, null);
}

Inside onClick() method, first get name from EditText and then insert name into table and passing it to Welcome Activity.

Update onClick() method as below:

        @Override
        public void onClick(View v) {
            // Name
            String getName = name.getText().toString();

            database = new DataBase(getBaseContext());
            database.open();

            Cursor C = database.insertData(getName);

            if(C != null) {
                C.moveToFirst();
                getName = C.getString(0);       
            }

            Intent intent = new Intent(Start.this, Welcome.class);
            intent.putExtra("data", getName);
            startActivity(intent);

            Toast.makeText(getApplicationContext(), "Data Saved.", Toast.LENGTH_LONG).show();
            database.close();

            Thread thread = new Thread() {
                public void run() {
                    try {
                        sleep(3000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                } 
            };
            thread.start();
        }

Hope this will help~

Ferdous Ahamed
  • 21,438
  • 5
  • 52
  • 61