elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.


 


Tema destacado: Píldoras formativas en seguridad de la información


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Java
| | | |-+  Problema con una App
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Problema con una App  (Leído 341 veces)
TickTack

Desconectado Desconectado

Mensajes: 260


Ver Perfil
Problema con una App
« en: 26 Mayo 2020, 13:14 »


Hola a todos,
quería hacer un control de pestañas, en donde se cargue en cada pestaña un Activity con su xml.
Pero al abrir la App se me crashea, y no se por qué.
En MainActivity.java está este código:
Código:
package com.mycompany.myapp;

import android.app.*;
import android.os.*;
import android.app.TabActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.TabHost;
import android.widget.Toast;

public class MainActivity extends Activity
{
   

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

TabHost tabHost = (TabHost) findViewById(android.R.id.tabhost); // initiate TabHost
        TabHost.TabSpec spec; // Reusable TabSpec for each tab
        Intent intent; // Reusable Intent for each tab

        spec = tabHost.newTabSpec("home"); // Create a new TabSpec using tab host
        spec.setIndicator("HOME"); // set the “HOME” as an indicator
        // Create an Intent to launch an Activity for the tab (to be reused)
        intent = new Intent(this, personalActivity.class);
        spec.setContent(intent);
        tabHost.addTab(spec);

        // Do the same for the other tabs

        spec = tabHost.newTabSpec("About"); // Create a new TabSpec using tab host
        spec.setIndicator("ABOUT"); // set the “ABOUT” as an indicator
        // Create an Intent to launch an Activity for the tab (to be reused)
        intent = new Intent(this, chatActivity.class);
        spec.setContent(intent);
        tabHost.addTab(spec);
        //set tab which one you want to open first time 0 or 1 or 2
        tabHost.setCurrentTab(1);
        tabHost.setOnTabChangedListener(new TabHost.OnTabChangeListener() {
@Override
public void onTabChanged(String tabId) {
// display the name of the tab whenever a tab is changed
Toast.makeText(getApplicationContext(), tabId, Toast.LENGTH_SHORT).show();
}
});

    }


}
En el respectivo main.xml está este código:
Código:
<?xml version="1.0" encoding="UTF-8"?>
<TabHost xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/tabhost"
android:layout_width="fill_parent"
android:layout_height="fill_parent">

<LinearLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical">

<FrameLayout
android:id="@android:id/tabcontent"
android:layout_width="fill_parent"
android:layout_height="0dip"
android:layout_weight="1" />

<TabWidget
android:id="@android:id/tabs"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="-4dp"
android:layout_weight="0" />

</LinearLayout>

</TabHost>
También me encargue de que cada Activity, que se cargará en cada pestaña, cargue su xml.
Miren:
personalActivity.java:
Código:
package com.mycompany.myapp;

import android.app.*;
import android.os.*;
import android.widget.Spinner;
import android.widget.ArrayAdapter;
import java.util.Locale;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import android.content.res.*;
import android.content.SharedPreferences;
import android.content.Context;
import android.widget.*;
import java.security.SecureRandom;

public class personalActivity extends Activity
{
    static final String AB = "0123456789abcdefghijklmnopqrstuvwxyz";
static SecureRandom rnd = new SecureRandom();

private Spinner spinner1,citizenship, spinner3;
private EditText editText1, editText2, editText3;

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

spinner1 = (Spinner) findViewById(R.id.spinner1);
        String []opciones={getString(R.string.secreto),getString(R.string.masculino),getString(R.string.femenino)};
        ArrayAdapter <String>adapter = new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item, opciones);
        spinner1.setAdapter(adapter);

Locale[] locale = Locale.getAvailableLocales();
ArrayList<String> countries = new ArrayList<String>();
String country;
for( Locale loc : locale ){
country = loc.getDisplayCountry();
if( country.length() > 0 && !countries.contains(country) ){
countries.add( country );
}
}
Collections.sort(countries, String.CASE_INSENSITIVE_ORDER);
countries.add(0, getString(R.string.secreto));
citizenship = (Spinner)findViewById(R.id.citizenship);
ArrayAdapter<String> adapter2 = new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item, countries);
citizenship.setAdapter(adapter2);

List age = new ArrayList<Integer>();
for (int i = 1; i <= 100; i++) {
age.add(Integer.toString(i));
}
age.add(0, getString(R.string.secreto));
ArrayAdapter<Integer> spinnerArrayAdapter = new ArrayAdapter<Integer>(
this, android.R.layout.simple_spinner_item, age);
spinner3 = (Spinner)findViewById(R.id.age);
spinner3.setAdapter(spinnerArrayAdapter);

editText1=(EditText)findViewById(R.id.mainEditText2);
editText2=(EditText)findViewById(R.id.mainEditText3);
editText3=(EditText)findViewById(R.id.mainEditText4);

SharedPreferences prefe=getSharedPreferences("datos", Context.MODE_PRIVATE);
        if(prefe.getString("usuario","").length()==0)
{
editText1.setText("rs "+randomString(5));
}
else
{
editText1.setText(prefe.getString("usuario",""));
}
spinner1.setSelection(prefe.getInt("sexo",-1));
citizenship.setSelection(prefe.getInt("pais",-1));
editText2.setText(prefe.getString("estado",""));
editText3.setText(prefe.getString("personal",""));
spinner3.setSelection(prefe.getInt("edad",-1));

    }

@Override
protected void onStop()
{
SharedPreferences preferencias=getSharedPreferences("datos",Context.MODE_PRIVATE);
        SharedPreferences.Editor editor=preferencias.edit();
        editor.putString("usuario", editText1.getText().toString());
editor.putInt("sexo", spinner1.getSelectedItemPosition());
editor.putInt("pais", citizenship.getSelectedItemPosition());
editor.putString("estado", editText2.getText().toString());
editor.putString("personal", editText3.getText().toString());
editor.putInt("edad", spinner3.getSelectedItemPosition());
        editor.commit();
        finish();
super.onStop();
}

String randomString( int len ){
StringBuilder sb = new StringBuilder( len );
for( int i = 0; i < len; i++ )
sb.append( AB.charAt( rnd.nextInt(AB.length()) ) );
return sb.toString();
}
}
personal.xml:
Código:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hashlink:"
android:textSize="29sp"
android:id="@+id/mainTextView1"/>

<EditText
android:layout_width="wrap_content"
android:ems="12"
android:layout_height="wrap_content"
android:layout_below="@id/mainTextView1"
android:id="@+id/mainEditText1"/>

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/usuario"
android:layout_below="@id/mainEditText1"
android:layout_marginTop="40dp"
android:textStyle="bold"
android:id="@+id/mainTextView2"/>

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/sexo"
android:layout_below="@id/mainTextView2"
android:layout_marginTop="40dp"
android:textStyle="bold"
android:id="@+id/mainTextView3"/>

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/pais"
android:layout_below="@id/mainTextView3"
android:layout_marginTop="40dp"
android:textStyle="bold"
android:id="@+id/mainTextView4"/>

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/ciudad"
android:layout_below="@id/mainTextView4"
android:layout_marginTop="40dp"
android:textStyle="bold"
android:id="@+id/mainTextView5"/>

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/personal"
android:layout_below="@id/mainTextView5"
android:layout_marginTop="40dp"
android:textStyle="bold"
android:id="@+id/mainTextView6"/>

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/edad"
android:layout_below="@id/mainTextView6"
android:layout_marginTop="40dp"
android:textStyle="bold"
android:id="@+id/mainTextView7"/>

<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/conectar"
android:layout_below="@id/mainTextView7"
android:layout_marginTop="50dp"
android:layout_marginLeft="120dp"/>

<EditText
android:layout_width="wrap_content"
android:ems="10"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/mainTextView6"
android:layout_marginTop="110dp"
android:id="@+id/mainEditText2"/>

<Spinner
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/mainTextView6"
android:layout_marginTop="180dp"
android:id="@+id/spinner1"/>

<Spinner
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/mainTextView6"
android:layout_marginTop="240dp"
android:id="@+id/citizenship"/>

<EditText
android:layout_width="wrap_content"
android:ems="10"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/mainTextView6"
android:layout_marginTop="285dp"
android:id="@+id/mainEditText3"/>

<EditText
android:layout_width="wrap_content"
android:ems="10"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/mainTextView6"
android:layout_marginTop="342dp"
android:id="@+id/mainEditText4"/>

<Spinner
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/mainTextView6"
android:layout_marginTop="418dp"
android:id="@+id/age"/>

</RelativeLayout>
chatActivity.java:
Código:
package com.mycompany.myapp;

import android.app.*;
import android.os.*;

public class chatActivity extends Activity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
        setContentView(R.layout.chat);
}
}
chat.xml:
Código:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
También agregue las actividades en AndroidManifest:
Código:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.mycompany.myapp" >

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name"
android:configChanges="locale">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
<activity
android:name=".personalActivity"
android:label="@string/title_activity_my"></activity>
<activity
android:name=".chatActivity"
android:label="@string/title_activity_about"></activity>
    </application>

</manifest>
Pero a pesar de todo esto me larga estos errores:
05-26 13:10:55.501 8924 8924 E     AndroidRuntime                               FATAL EXCEPTION: main
05-26 13:10:55.501 8924 8924 E     AndroidRuntime                               Process: com.mycompany.myapp, PID: 8924
05-26 13:10:55.501 8924 8924 E     AndroidRuntime                               java.lang.RuntimeException: Unable to start activity ComponentInfo{com.mycompany.myapp/com.mycompany.myapp.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TabWidget.addView(android.view.View)' on a null object reference
05-26 13:10:55.501 8924 8924 E     AndroidRuntime                               at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2864)
05-26 13:10:55.501 8924 8924 E     AndroidRuntime                               at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2961)
05-26 13:10:55.501 8924 8924 E     AndroidRuntime                               at android.app.ActivityThread.-wrap11(Unknown Source:0)
05-26 13:10:55.501 8924 8924 E     AndroidRuntime                               at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1657)
05-26 13:10:55.501 8924 8924 E     AndroidRuntime                               at android.os.Handler.dispatchMessage(Handler.java:106)
05-26 13:10:55.501 8924 8924 E     AndroidRuntime                               at android.os.Looper.loop(Looper.java:165)
05-26 13:10:55.501 8924 8924 E     AndroidRuntime                               at android.app.ActivityThread.main(ActivityThread.java:6774)
05-26 13:10:55.501 8924 8924 E     AndroidRuntime                               at java.lang.reflect.Method.invoke(Native Method)
05-26 13:10:55.501 8924 8924 E     AndroidRuntime                               at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:477)
05-26 13:10:55.501 8924 8924 E     AndroidRuntime                               at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:809)
05-26 13:10:55.501 8924 8924 E     AndroidRuntime                               Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TabWidget.addView(android.view.View)' on a null object reference
05-26 13:10:55.501 8924 8924 E     AndroidRuntime                               at android.widget.TabHost.addTab(TabHost.java:234)
05-26 13:10:55.501 8924 8924 E     AndroidRuntime                               at com.mycompany.myapp.MainActivity.onCreate(MainActivity.java:32)
05-26 13:10:55.501 8924 8924 E     AndroidRuntime                               at android.app.Activity.performCreate(Activity.java:7154)
05-26 13:10:55.501 8924 8924 E     AndroidRuntime                               at android.app.Activity.performCreate(Activity.java:7145)
05-26 13:10:55.501 8924 8924 E     AndroidRuntime                               at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1225)
05-26 13:10:55.501 8924 8924 E     AndroidRuntime                               at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2817)
05-26 13:10:55.501 8924 8924 E     AndroidRuntime                               ... 9

Alguien me puede ayudar, por favor?

Gracias y saludos


En línea

rub'n


Desconectado Desconectado

Mensajes: 1.086


(e -> λ("live now")); tatuar -> λ("α");


Ver Perfil WWW
Re: Problema con una App
« Respuesta #1 en: 2 Junio 2020, 17:36 »

probaste con tabHost.setup() en tu MainActivity ?, justo después del casting de

Código
  1. TabHost tabHost = (TabHost) findViewById(android.R.id.tabhost);


En línea

KNOWLEDGE  SHOULD BE FREE!!!
If you don't have time to read, you don't have the time (or the tools) to write, Simple as that. Stephen King.
TickTack

Desconectado Desconectado

Mensajes: 260


Ver Perfil
Re: Problema con una App
« Respuesta #2 en: 5 Junio 2020, 11:33 »

Hola rub'n,

si, ya probé con el método setup() pero siguió sin funcionar...

Pero al trabajar con TabLayout en vez de con TabHost me funcionó. Creo que se debe a que TabHost es viejo...


Gracias y saludos
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines