Unterschied zwischen Java und Android Java

A

AndrejT

Neues Mitglied
5
Hallo zusammen

Ich arbeite schon seit einigen Jahren fast täglich mit Java.
Ich bin ziehmlich fortgeschritten wenns um Java geht.

Doch ich habe ein grosses Problem mit dem Android SDK und kann mich damit einfach nicht anfreunden.

Heute habe ich mit Java eine Verbindung zu NoSQL (Mongo DB) erstellt und das es mir gleich dazu eine Datenbank sowie die Collections erstellt und die auch befüllt was mir auch schlussendlich gelang. Habe es mit einer main methode testen lassen und alles lief super.

Nun habe ich dieses Projekt bei meinem Android App projekt importiert.
Ich möchte nun dies ausführen wenn ich auf ein button auf der App drücke.
Ich erstellte den Button und alles lief super doch wenn ich die app starte und auf den Button klicke kommt eine fehlermeldung und die app stürzt ab. nun habe ich einen letzten schritt rückgängig gemacht und ich kriege einen blackscreen mit der meldung im Eclipse irgendetwas mit ColorBuffer bla bla...
Nun habe ich alles rückgängig gemacht das die app genau so ist wie wenn man ein neues android projekt erstellt. manifest wurde auf standart gelegt die mainactivity und auch das layout. doch auch jetzt kann ich nicht mehr die app starten ... ich rkeieg immer noch die dumme fehlermeldung mit dem colorbuffer.

wie kann ich mich am besten mit dem android sdk anfreunden?
wo kann ich genau die fehlermeldungen lesen?
wenn ich wieder so ein problem habe wie kann ich es am einfachsten beheben?
 
zeig mal dein logcat deinen code und die manifestdatei!

ansinsten versuch mal auf Project->Clean->ok
 
Hei jetzt stresst mich dieses Android SDK aber so richtg, ich habe es geschaft alles so rückgängg zu machen das es wieder funktoniert.

Weshalb darf ich kein Objekt in onCreate Methode erstellen?

Wie gesagt, ich habe ein externes Projekt das ene DB verbindung herstellt und etwas inserted in einer collecton...
Funktioniert alles einwand fre.
Projekt wurde importiert. objekt wurde erstellt (objekt ist noch unused) starte mal die app nur so ohne das das objekt irgendetwas macht sondern ich erstelle es einfach. nun crashd die app und wird nichtmal gestartet... weshalb?
 
Logcat :cursing::cursing::cursing:

lg.
 
Objekte in onCreate anzulegen ist eigentlich kein Problem.

Ich denke es würde dir helfen die Basics der Android Architektur zu erlernen und zu verstehen. Würde dir dazu das Buch empfehlen "Android 4.4" von Arno Becker und Marcus Pant.

Lese das Buch einfach einmal von vorne bis hinten durch und dann fang noch einmal an mit deinem Android Projekt und du wirst sehen dann wird dies funktionieren.
 
Oder fang an die Android Docu zu lesen...

die ist super, kostenlos, aktuell...

lg. Dagobert
 
habe nun alles umprogrammiert... nähmlich mit einer mysql db und einer phpseite als schnittstelle ...

so sieht alles aus...

Activity:
Code:
package com.gibb.pickick;

import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;

import android.annotation.SuppressLint;
import android.os.Bundle;
import android.os.StrictMode;
import android.support.v7.app.ActionBarActivity;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity extends ActionBarActivity {
        
    
    EditText etName;
    EditText etLastname;
    EditText etPhoneNumber;
    Button submit;
    InputStream is = null;
    
    @SuppressLint("NewApi")
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
        StrictMode.setThreadPolicy(policy);
        setContentView(R.layout.activity_main);        
              
        
        etName = (EditText) findViewById(R.id.editText1);
        etLastname = (EditText) findViewById(R.id.editText2);
        etPhoneNumber = (EditText) findViewById(R.id.editText3);
        
        submit.setOnClickListener(new View.OnClickListener() {
            
            @Override
            public void onClick(View v) {
                String name = ""+etName.getText().toString();
                String lastname = ""+etLastname.getText().toString();
                String phoneNumber = ""+etPhoneNumber.getText().toString();
                
                List<NameValuePair> nameValuePair = new ArrayList<NameValuePair>(1);
                
                nameValuePair.add(new BasicNameValuePair("name", name));
                nameValuePair.add(new BasicNameValuePair("lastname", lastname));
                nameValuePair.add(new BasicNameValuePair("phoneNumber", phoneNumber));
                
                try {
                    HttpClient httpClient = new DefaultHttpClient();
                    
                    HttpPost httpPost = new HttpPost("http://10.1.4.58/demo/demo.php");
                    
                    httpPost.setEntity(new UrlEncodedFormEntity(nameValuePair));
                    
                    HttpResponse response = httpClient.execute(httpPost);
                    
                    HttpEntity entity = response.getEntity();
                    
                    is = entity.getContent();
                    
                    String msg = "Data entered success";
                    
                    Toast.makeText(getApplicationContext(), msg, Toast.LENGTH_LONG).show();
                            
                } catch(ClientProtocolException e) {
                    Log.e("ClentProtocol", "IOException");
                    e.printStackTrace();
                } catch (IOException e) {
                    Log.e("Log_tag", "IOException");
                    e.printStackTrace();
                }
                
            }
        });
        
        
        
        
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.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();
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }
    
}
activty_main.xml:
Code:
<RelativeLayout 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:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.gibb.pickick.MainActivity" >

    <EditText
        android:id="@+id/editText2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/textView2"
        android:layout_below="@+id/textView2"
        android:ems="10"
        android:inputType="textPersonName"
        android:text="Lastname" />

    <LinearLayout
        android:id="@+id/linearLayout1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_below="@+id/editText1"
        android:layout_marginLeft="15dp"
        android:orientation="vertical" >
    </LinearLayout>

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_marginTop="14dp"
        android:text="Name:" />

    <EditText
        android:id="@+id/editText1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_below="@+id/textView1"
        android:layout_marginTop="15dp"
        android:ems="10"
        android:inputType="textPersonName"
        android:text="Name" >

        <requestFocus />
    </EditText>

    <TextView
        android:id="@+id/textView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/editText1"
        android:layout_below="@+id/linearLayout1"
        android:text="Lastname:" />

    <TextView
        android:id="@+id/textView3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/editText2"
        android:layout_below="@+id/editText2"
        android:text="Phone Number:" />

    <EditText
        android:id="@+id/editText3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/textView3"
        android:layout_below="@+id/textView3"
        android:ems="10"
        android:inputType="phone"
        android:text="Phone" />

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/editText3"
        android:layout_marginTop="114dp"
        android:layout_toRightOf="@+id/textView3"
        android:text="Submt" />

</RelativeLayout>
PHP:
Code:
<?php

$con=mysql_connect('localhost', 'root', '');
mysql_select_db("contactdb", $con);

$name=$_POST['name'];
$lastname=$_POST['lastname'];
$phoneNumber=$_POST['phoneNumber'];

mysql_query("insert into test(name, lastname, phoneNumber) values('{$name}', {$lastname}', {$phoneNumber}')");

mysql_close();



?>
und im manifest ist die permission gesetzt
Code:
<uses-permission android:name="android.permission.INTERNET"/>
Logcat gibt das aus:
2015-01-29 13-15-17_Java - PicKicksrccomgibbpickickMainActivity.png
AJW1vWJmuK9BAAAAAElFTkSuQmCC
 
Die Variable submit ist nicht initialisiert, Zeile 52 in onCreate (wie auch im StackTrace angegeben).
 
Außerdem machst du da etwas im ganz schlechten Stiel... guck dir lieber mal den async task an...

lg.
 
egal was ich mache und ich sie probiere zu initialisieren, es zegt mir immer die selbe fehler meldung an. wie sollte ich nach android die variable Button submit intitialisieren?

ich habe sie so initialisiert

Button submit = null;
 
So?
Code:
button = (Button) findViewById(R.id.button1);
So wie deine editTexte doch auch.

Und den Tipp mit dem AsyncTask solltest du auch beherzigen, sonst gibt es eine NetworkOnMainThreadException.html.
 
Es wird immer wie blöder und blöder .. nun krieg ich ke stackTrace und alles funktioniert enwandfrei kriege sogar die richtige meldung zurück doch nichts wird in die Datenbank abgespeichert...

der db name sowie der tabellen namen und all die attribute und values sind alle korrekt trotzdem wird nichts abgespeichert. danke trotzdem
 
AndrejT schrieb:
ich habe sie so initialisiert

Button submit = null;
Wenn du ein Objekt auf null setzt, darfst du dich über eine NullPointerException nicht wundern...
 
Die Aussage ist nicht allgemein gültig. Bevor ich in C++ einen wilden Pointer habe, setze ich ihn lieber null um bei Zugriff zu prüfen, ob er gültig ist... if(myPointer) foo();

Wie auch immer, hier gehts ja auch nicht um C++^^

Die Aussage sollte also eher lauten -> wenn man auf ein Null-Objekt ("leere Refferenz")
zugreift, darf man sich über einen NPtr nicht wundern. :D
 
ausserdem wird jedes objekt eh mit null initialisiert wenn noch kein new operator ihn initialisiert hat also ist deine eigene initialisierung redundant.
 
Nein, der Compiler meckert, wenn nicht jeder Pfad zu einer Zuweisung (bei einer lokalen Variable) führt. d.h ein object = null kann nötig sein. Dann sollte man aber auch eine Nullbehandlung haben, weil man sich dann explizit dafür entschieden hat, dass die Variable null sein kann.

Felder (Variablen der Klasse) sind nicht nur deklariert, sondern automatisch auch mit dem default Wert initialisiert. (bei Objekten eben null)
Lokale Variablen (Variablen einer Methode) sind erstmal nur deklariert und müssen in jedem Fall von Hand auch initialisiert werden.
Siehe Chapter 4. Types, Values, and Variables
 
ja stimmt antürlich sorry ich hatte mich glaub ich auf sein button objekt bezogen und dieses war ja keine lokale variable
 
Musst dich nicht entschuldigen. Ich denke dieser Fakt ist in dieser Form nicht allen klar, da kann man das einfach mal erwähnen ;)
 
stimmt schon ich weiß sowas auch normalerweise...habe oft genug den Hinweis vom compiler erhalten dass die variable xyz nciht initialisiert sein könnte wenn ich manchmal auf uninitialisierte variablen zugriff.
 

Ähnliche Themen

D
Antworten
23
Aufrufe
2.678
Data2006
D
L
Antworten
4
Aufrufe
1.351
lonnie9020
L
H
Antworten
2
Aufrufe
1.321
Hcman
H
Zurück
Oben Unten