sangeetha
sangeetha

Reputation: 67

How to use string builder?

I want to display following output: NAME : _ USN : _ ADDRESS : _

I want to display it in a single text view. When I tried using 2 text views it worked. But to use a single text view I used String builder, But when i click submit button, My application gets crashed. Why it's happening?

                    /*main.xml*/

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/container"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.assignment3.MainActivity"
    tools:ignore="MergeRootFrame" >

    <TextView
        android:id="@+id/name"
        android:layout_width="90dp"
        android:layout_height="wrap_content"
        android:layout_marginTop="20dp"
        android:paddingLeft="43dp"
        android:text="@string/name" />

    <EditText
        android:id="@+id/edit_name"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_marginLeft="95dp"
        android:gravity="center"
        android:inputType="textMultiLine"
        android:hint="@string/edit_name" />

    <TextView
        android:id="@+id/usn"
        android:layout_width="90dp"
        android:layout_height="wrap_content"
        android:layout_below="@+id/name"
        android:layout_marginTop="30dp"
        android:paddingLeft="52dp"
        android:text="@string/usn" />

    <EditText
        android:id="@+id/edit_usn"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/edit_name"
        android:layout_marginLeft="95dp"
        android:layout_marginTop="10dp"
        android:gravity="center"
        android:inputType="textMultiLine"
        android:hint="@string/edit_usn" />

    <TextView
        android:id="@+id/add"
        android:layout_width="90dp"
        android:layout_height="wrap_content"
        android:layout_below="@+id/usn"
        android:layout_marginTop="40dp"
        android:paddingLeft="20.3dp"
        android:text="@string/add" />

    <EditText
        android:id="@+id/edit_add"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/edit_usn"
        android:layout_marginLeft="95dp"
        android:layout_marginTop="20dp"
        android:gravity="center"
        android:inputType="textMultiLine"
        android:hint="@string/edit_add" />
    <Button 
        android:id="@+id/submit"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="230dp"
        android:layout_centerHorizontal="true"
        android:text="@string/submit"/>

</RelativeLayout>


          /*layout file*/

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <string name="app_name">Student Application Form</string>
    <string name="name">NAME :</string>
    <string name="edit_name">Enter your Name</string>
    <string name="usn">USN :</string>
    <string name="edit_usn">Enter the Usn</string>
    <string name="add">ADDRESS :</string>
    <string name="edit_add">Enter the Address</string>
    <string name="submit">Submit</string>
    <string name="number">1.</string>
    <string name="action_settings">Settings</string>
    <string name="title_activity_details">Details</string>
    <string name="hello_world">Hello world!</string>

</resources>

                 /*Activity_details.xml*/
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/container"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.assignment3.MainActivity"
    tools:ignore="MergeRootFrame" >

    <TextView
        android:id="@+id/number"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:paddingTop="5dp"
        android:text="@string/number"
        android:textStyle="bold" />

    <TextView
        android:id="@+id/name"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="12dp"
        android:paddingLeft="43dp"
        android:text="@string/name"
        android:textStyle="bold" />

    <TextView
        android:id="@+id/usn"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/name"
        android:layout_marginTop="15dp"
        android:paddingLeft="52dp" 
        android:text="@string/usn"
        android:textStyle="bold"/>

    <TextView
        android:id="@+id/add"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/usn"
        android:layout_marginTop="20dp"
        android:paddingLeft="20.3dp"
        android:text="@string/add"
        android:textStyle="bold" />


</RelativeLayout>
          /*Main Activity.java*/
package com.example.assignment4;

import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;

public class MainActivity extends ActionBarActivity implements OnClickListener{
    Button btn;
    EditText etext1;
    EditText etext2;
    EditText etext3;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        etext1 = (EditText) findViewById(R.id.edit_name);
        etext2 = (EditText) findViewById(R.id.edit_usn);
        etext3 = (EditText) findViewById(R.id.edit_add);
        /** Called when the user clicks the Submit button */
        btn.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        Intent intent = new Intent(this, DetailsActivity.class);
        intent.putExtra("name", etext1.getText().toString());
        intent.putExtra("usn", etext2.getText().toString());
        intent.putExtra("address", etext3.getText().toString());
        startActivity(intent);
    }
}

I passed the intent from this class to Details class. But when I click submit,it gets crashed. But Before it was working properly. After I added string builder, it started giving problem.

           /*Details.java*/

package com.example.assignment3;

import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.widget.TextView;

    public class Details extends ActionBarActivity {
        TextView text1;
        TextView text2;
        TextView text3;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_details);

            //Typeface boldTypeface = Typeface.defaultFromStyle(Typeface.BOLD);
            //String Builder to append strings
            StringBuilder sb1=new StringBuilder();
            StringBuilder sb2=new StringBuilder();
            StringBuilder sb3=new StringBuilder();
            //Receiving the intent
            Intent intent=getIntent();
            //Extracting the string 
            String Name=intent.getStringExtra("name");
            String Usn=intent.getStringExtra("usn");
            String Address=intent.getStringExtra("address");
            //get the string from a textview
            String stext1=getString(R.id.name);
            sb1.append(stext1);
            sb1.append(Name);
            text1.setText(sb1);
            String stext2=getString(R.id.usn);
            sb2.append(stext2);
            sb2.append(Usn);
            text2.setText(sb2);
            String stext3=getString(R.id.add);
            sb3.append(stext3);
            sb3.append(Address);
            text3.setText(sb3);

        }

    }

I'm getting Run Time Exception and Null Pointer exception in Logcat

Upvotes: 1

Views: 4274

Answers (3)

Sagar Maiyad
Sagar Maiyad

Reputation: 12733

you forgot to initialize textviews.

change your code like below:

public class Details extends ActionBarActivity {
        TextView text1;
        TextView text2;
        TextView text3;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_details);

            text1 = (TextView)findViewById(R.id.name);
            text2 = (TextView)findViewById(R.id.usn);
            text3 = (TextView)findViewById(R.id.add);

            //Typeface boldTypeface = Typeface.defaultFromStyle(Typeface.BOLD);
            //String Builder to append strings
            StringBuilder sb1=new StringBuilder();
            StringBuilder sb2=new StringBuilder();
            StringBuilder sb3=new StringBuilder();
            //Receiving the intent
            Intent intent=getIntent();
            //Extracting the string 
            String Name=intent.getStringExtra("name");
            String Usn=intent.getStringExtra("usn");
            String Address=intent.getStringExtra("address");
            //get the string from a textview

            String stext1= getResources().getString(R.string.name);
            text1.setText(Html.fromHtml("<b>" + stext1+ "</b>" +Name));


           String stext2= getResources().getString(R.string.usn);
            text2.setText(Html.fromHtml("<b>" + stext2+ "</b>" +Usn));


           String stext3= getResources().getString(R.string.add);
            text3.setText(Html.fromHtml("<b>" + stext3+ "</b>" +Address));


        }

    }

Upvotes: 2

Piyush
Piyush

Reputation: 18933

As Simple you have just declared your TextView s, not initialize it

TextView text1;
TextView text2;
TextView text3;

So initialize it on onCreate() method

 text1 = (TextView)findViewById(R.id.name);
 text2 = (TextView)findViewById(R.id.usn);
 text3 = (TextView)findViewById(R.id.add);

Upvotes: 1

The Badak
The Badak

Reputation: 2030

try changing these:


String stext1=getString(R.id.name);

to

String stext1=(findViewById(R.id.name)).getText().toString();


String stext2=getString(R.id.usn);

to

String stext2=(findViewById(R.id.usn)).getText().toString();


String stext3=getString(R.id.add);

to

String stext3=(findViewById(R.id.add)).getText().toString();

Upvotes: 0

Related Questions