2015-06-12 10 views
5

Nicht möglich, Daten von einem Fragment zu einem anderen mit Absicht zu übergeben. Logik ist in Ordnung. Bitte überprüfen Sie die letzten Teile der Hauptaktivität, wo ich Strings zu anderen Aktivitäten gesendet habe mit putExtra. HierVersuch zum Aufrufen der virtuellen Methode 'void android.widget.TextView.setText (java.lang.CharSequence)' für eine Nullobjektreferenz

ist die MainActivity.java:

public class MainActivity extends Activity implements View.OnClickListener { 
EditText ed1,ed2,ed3,ed4,ed5,ed6; 

Button bt1; 
TextView tv1,tv2; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    ed1=(EditText)findViewById(R.id.editText); 
    ed2=(EditText)findViewById(R.id.editText2); 
    ed3=(EditText)findViewById(R.id.editText3); 
    ed4=(EditText)findViewById(R.id.editText4); 
    ed5=(EditText)findViewById(R.id.editText5); 
    ed6=(EditText)findViewById(R.id.editText6); 
    tv1=(TextView)findViewById(R.id.textView); 
    tv2=(TextView)findViewById(R.id.textView2); 
    bt1=(Button)findViewById(R.id.button); 
    bt1.setOnClickListener(this); 
} 
public void onClick(View v) 
{ 

    String str1=ed1.getText().toString(); 
    String str2=ed2.getText().toString(); 
    String str3=ed3.getText().toString(); 
    String str4=ed4.getText().toString(); 
    String str5=ed5.getText().toString(); 
    String str6=ed6.getText().toString(); 

    if(str1.matches("") || str2.matches("") || str3.matches("")) 
    { 
     tv1.setText("One or more fields missing"); 
     if(str4.matches("") || str5.matches("") || str6.matches("")) 
     { 
      tv2.setText("One or more fields missing"); 
     } 
    } 

    else { 
     int age1 = Integer.parseInt(ed2.getText().toString()); 
     int age2 = Integer.parseInt(ed5.getText().toString()); 

     int l1 = str1.length(); 
     str1 = str1.toLowerCase(); 
     str4 = str4.toLowerCase(); 
     int l2 = str4.length(); 

     int[] a = new int[26]; 
     int[] b = new int[26]; 

     for (int i = 0; i < l1; i++) { 

      char c = str1.charAt(i); 
      int x = (int) c - 97; 
      a[x]++; 
     } 
     for (int i = 0; i < l2; i++) { 

      char c = str4.charAt(i); 
      int x = (int) c - 97; 
      b[x]++; 
     } 
     int s=0,p; 
     for(int i=0;i<26;i++) 
     { 
      if(a[i]>b[i]) 
       p=a[i]; 
      else 
       p=b[i]; 

      s+=p; 
     } 
     if(l1>l2) 
      p=l1; 
     else 
      p=l2; 
     double love1=(double)(s/p)*100; 
     double love2=0.0,x; 

     if(age1>age2) { 
      p = age1; 
     x=age2; 
     } 
     else { 
      p = age2; 
      x=age1; 
     } 
     love2=(double)(x/p)*100; 

     Intent in=new Intent(MainActivity.this,SecondActivity.class); 
     String s1=""+love1; 
     String s2=""+love2; 



     in.putExtra("k1",str4); 
     in.putExtra("k2",str4); 
     in.putExtra("k3", love1); 
     in.putExtra("k4",love2); 
     startActivity(in); 
     finish(); 


    } 


} 


} 

Hier ist der Code für SecondActivity.java:

public class SecondActivity extends Activity { 

    TextView tv7,tv8,tv9,tv10; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_second); 


    Intent in = getIntent(); 

    String s1 = in.getStringExtra("k1"); 
    String s2 = in.getStringExtra("k2"); 
    String s3 = in.getStringExtra("k3"); 
    String s4 = in.getStringExtra("k4"); 
    tv7=(TextView)findViewById(R.id.textView3); 
    tv8=(TextView)findViewById(R.id.editText4); 
    tv9=(TextView)findViewById(R.id.editText5); 
    tv10=(TextView)findViewById(R.id.editText6); 

    tv7.setText("Hello "+s1); 
    tv8.setText("Your partner "+s2+" is really nice"); 
    tv9.setText("Your love percent based on name is "+s3); 
    tv10.setText("Your love percent based on age is "+s4); 
} 
} 

Hier ist der Fehler Ich erhalte:

Process: khurana.nikhil.lovemeter, PID: 4019 
java.lang.RuntimeException: Unable to start activity ComponentInfo{khurana.nikhil.lovemeter/khurana.nikhil.lovemeter.SecondActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.setText(java.lang.CharSequence)' on a null object reference 
     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2325) 
     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2390) 
     at android.app.ActivityThread.access$800(ActivityThread.java:151) 
     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303) 
     at android.os.Handler.dispatchMessage(Handler.java:102) 
     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) 
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.setText(java.lang.CharSequence)' on a null object reference 
     at khurana.nikhil.lovemeter.SecondActivity.onCreate(SecondActivity.java:32) 
     at android.app.Activity.performCreate(Activity.java:5990) 
     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106) 
     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2278) 

Hier ist activity_second.XML:

+2

Fügen Sie activity_second.xml bitte hinzu. – mrtn

+0

Siehe den folgenden Link. https://vshivam.wordpress.com/2015/01/14/inflating-different-xml-layouts-in-an-android-listview-for-different-objects/ –

+0

Mögliche Duplikate von [Was ist eine NullPointerException und wie repariere ich es?] (http://stackoverflow.com/questions/218384/what-is-a-nullpointerexception-and-how-do-fix-it) – Denny

Antwort

7
tv8=(TextView)findViewById(R.id.editText4); 
tv9=(TextView)findViewById(R.id.editText5); 
tv10=(TextView)findViewById(R.id.editText6); 

ändern diese:

tv8=(TextView)findViewById(R.id.textView4); 
tv9=(TextView)findViewById(R.id.textView5); 
tv10=(TextView)findViewById(R.id.textView6); 

Sie haben gerade die falschen IDs.

+0

Werfen Sie einen Blick auf die XML-Datei. Die IDs unterscheiden sich vom Code. Es würde eine "ClassCastException" auslösen, wenn die IDs für verschiedene Ansichten verwendet würden. Aber da sie nicht existieren, gibt es dort nur "null". – mrtn

+0

Danke mate.It hat funktioniert ... Was für ein dummer Fehler, der war ... Ein weiteres Problem: Die App funktioniert gut im Emulator, funktioniert aber nicht auf dem Handy. Es erzeugt einen Fehler, der besagt: Problem beim Parsen des Pakets. –

+0

@ mrtn. würdest du bitte meine Frage beantworten? http://stackoverflow.com/q/40817284/4568864 –

Verwandte Themen