Client - Server

  • Antworten:14
Ramirez
  • Forum-Beiträge: 13

23.03.2014, 11:38:24 via Website

Hallo zusammen,

Ich bin dabei meine Maturaarbeit zu schreiben und will dafür eine App kreiiren bei der man nur ein Bild in sein Profil laden kann
und welches dann andre Benutzer über die App sehen können.

Ich bin noch ein absoluter Anfänger und hätte darum eine paar fragen. Wie stelle ich eine Verbindung zwischen App und
Server her? Wie setze ich einen Server auf der auf die Forderungen der App/Client reagiert? Was für einen Server brauche ich da?

Ich bin fast am verzweifeln und bin für nützliche Antworten sehr dankbar.

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

23.03.2014, 11:47:44 via Website

Am einfachsten ist es, wenn du es über http machst.
Dafür reicht ein einfacher WebServer mit php oder ähnliches.
Auf dem Server benötigst du ein PHp Skript dass deine http Anforderung verarbeitet.
Daten werden am besten in einer Db gespeichert.
mit android musst du einfach einen WebClient oder HttpUrl Connection eine WebVerbindung herstellen.

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Ramirez
  • Forum-Beiträge: 13

25.03.2014, 21:59:06 via Website

Vielen Dank für deine sehr nützliche Antwort.

Ich bin gerade am lernen von Java und bin schon damit fast überfordert.
Wäre dass möglich dass du nur das Grundgerüst eines solchen PHP Skriptes posten köntest, falls das
keine grosse Arbeit ist? Ich bin starte gerade von null und habe keine grosse Ahnung von Programmiersprachen.

Ich wäre dir sehr dankbar

lg Ramirez

Antworten
Stefan
  • Forum-Beiträge: 1.560

26.03.2014, 07:24:41 via App

Wieso machst du sowas als Maturaarbeit, wenn du von null starten musst?

ALLERGIKERINFO:
Beiträge können Spuren von Humor, Ironie, Sarkasmus und Erdnüssen enthalten.

Antworten
AndreasP
  • Forum-Beiträge: 13

26.03.2014, 08:29:39 via Website

Da muss ich Stefan recht geben.
Aber ich zeige dir mal ein paar Anreize:

Wenn du Daten austauschen willst, dann brauchst du entweder einen eigenen Server oder du machst dich mal mit GoogleAppEngine
vertraut. Auf dem Server muss nun dein Webservice (von mir aus als PHP). Die Daten speicherst du auf deinem Server bzw. einer
Datenbank, die auf dem Server liegt. Dein PHP könnte so etwa aussehen:
--> google mal nach "davidwalsh web-service-php-mysql-xml-json" oder so ähnlich.

Jetzt brauchst du noch deine Android-Clienten. Dazu gibt es hier im Forum schon genug Themen.
Am einfachsten machst du das mit httpClient und httpRespone / httpGet .
Durchsuche das Forum mal nach Client-Server.

Es gibt verschiedene Möglichkeiten. Belese dich auch mal in Sockets in Android, usw.

MfG
Andreas

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

26.03.2014, 15:54:59 via App

Es gibt auch im inet gute tuts zu diesem Thema.

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Ramirez
  • Forum-Beiträge: 13

08.04.2014, 14:59:46 via Website

Vielen Dank euch für die Antworten.

Ich habe gelesen es sei nicht klug bilder in einer db zu speichern. Stimmt das?
Wie kann ich überhaupt eine db erstellen in der ich bilder eintragen kann, bei phpadmin?

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

08.04.2014, 15:18:52 via Website

So einfach ist es nicht, ich würde es auf den unschönen weg machen, die Bilder zu lesen, ein Base64 String draus zu generieren und diesen in der DB speichern.
Wenn du das bild brauchst, kannst du den String aus der DB holen und per php in ein Bild Codieren.
Aber wich würde immer noch den altmodischen weg mit Bildfiles bevorzugen, da man in ner DB schnell den überblick verliert, wenn man die Bilder nicht sieht

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Ramirez
  • Forum-Beiträge: 13

01.06.2014, 16:58:28 via Website

Hallo zusammen, ich habe nun eine App die ungefähr das tut was ich will.

Ich stelle den Code gleich mal rein:`

protected static final int SELECT_PICTURE = 1;
private String selectedImagePath;


 public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        ((Button)  findViewById(R.id.Button01))
        .setOnClickListener(new OnClickListener() {



                    public void onClick(View arg0) {


                        Intent intent = new Intent();
                        intent.setType("image/*");
                        intent.setAction(Intent.ACTION_GET_CONTENT);
                        startActivityForResult(Intent.createChooser(intent,"Select Picture"), SELECT_PICTURE);

                    }
                });
    }

    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (resultCode == RESULT_OK) {
            if (requestCode == SELECT_PICTURE) {
                Uri selectedImageUri = data.getData();
                selectedImagePath = getPath(selectedImageUri);
            }
        }
    }



    public String getPath(Uri uri) {

        if( uri == null ) {

            return null;
        }

        String[] projection = { MediaStore.Images.Media.DATA };
        Cursor cursor = managedQuery(uri, projection, null, null, null);
        if( cursor != null ){
            int column_index = cursor
            .getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
            cursor.moveToFirst();
            return cursor.getString(column_index);
        }

        return uri.getPath();
}


















private void uploadFile(String filePath, String fileName) {

  InputStream inputStream;
  try {
    inputStream = new FileInputStream(new File(selectedImagePath));
    byte[] data;
    try {
      data = IOUtils.toByteArray(inputStream);

      HttpClient httpClient = new DefaultHttpClient();
      HttpPost httpPost = new HttpPost("server adresse");

      InputStreamBody inputStreamBody = new InputStreamBody(new ByteArrayInputStream(data), fileName);
      MultipartEntity multipartEntity = new MultipartEntity();
      multipartEntity.addPart("file", inputStreamBody);
      httpPost.setEntity(multipartEntity);

      HttpResponse httpResponse = httpClient.execute(httpPost);


      if(httpResponse != null) {

      } else { // Error, no response.

      }
    } catch (IOException e) {
      e.printStackTrace();
    }
  } catch (FileNotFoundException e1) {
    e1.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;
}

}

`

Wie kann ich machen das das ausgewählte Bild dann in einem kleinem Fenster erscheint?
Ich weiss das sollte irgendwie mit einer view sein. Ich wäre sehr dankbar falls mir da jemand helfen könnte?

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

01.06.2014, 18:24:27 via Website

Schau dir mal die ImageView auf der d.android.com an.
Da brauchst du halt dein Bild als Bitmap.

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Ramirez
  • Forum-Beiträge: 13

09.06.2014, 16:36:08 via Website

Vielen Dank für deine Antwort

Ich habe es versucht, jedoch funktioniert es noch nicht ganz.
Kann mir jemand sagen, was da falsch ist?
(Ist ca. in der Mitte

protected static final int SELECT_PICTURE = 1;
private String selectedImagePath;


 public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        ((Button)  findViewById(R.id.Button01))
        .setOnClickListener(new OnClickListener() {



                    public void onClick(View arg0) {


                        Intent intent = new Intent();
                        intent.setType("image/*");
                        intent.setAction(Intent.ACTION_GET_CONTENT);
                        startActivityForResult(Intent.createChooser(intent,"Select Picture"), SELECT_PICTURE);

                    }
                });
    }

    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (resultCode == RESULT_OK) {
            if (requestCode == SELECT_PICTURE) {
                Uri selectedImageUri = data.getData();
                selectedImagePath = getPath(selectedImageUri);
            }
        }
    }



    @SuppressWarnings("deprecation")
    public String getPath(Uri uri) {

        if( uri == null ) {

            return null;
        }

        String[] projection = { MediaStore.Images.Media.DATA };
        Cursor cursor = managedQuery(uri, projection, null, null, null);
        if( cursor != null ){
            int column_index = cursor
            .getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
            cursor.moveToFirst();
            return cursor.getString(column_index);
        }

        return uri.getPath();
}

    ImageView view = (ImageView)findViewById(R.id.show);
     img.setImageBitmap(public image getImage(String filename));


  private void uploadFile(String filePath, String fileName) {

  InputStream inputStream;
  try {
    inputStream = new FileInputStream(new File(selectedImagePath));
    byte[] data;
    try {
      data = IOUtils.toByteArray(inputStream);

      HttpClient httpClient = new DefaultHttpClient();
      HttpPost httpPost = new HttpPost("server dienst ip");

      InputStreamBody inputStreamBody = new InputStreamBody(new ByteArrayInputStream(data), fileName);
      MultipartEntity multipartEntity = new MultipartEntity();
      multipartEntity.addPart("file", inputStreamBody);
      httpPost.setEntity(multipartEntity);

      HttpResponse httpResponse = httpClient.execute(httpPost);


      if(httpResponse != null) {

      } else { 
           Error, no response.

      }
    } catch (IOException e) {
      e.printStackTrace();
    }
  } catch (FileNotFoundException e1) {
    e1.printStackTrace();
  }
}

Ich habe leider ein weiteres Problem wo ich einfach nicht weiterkomme:

 private void uploadFile(String filePath, String fileName) {

Eclipse zeigt folgenen Fehler an:
Syntax error on token "(", , expected
Ich weiss nicht genau was falsch ist.

Ich weiss es sind viele Fragen, aber ich bin euch für jede Antwort sehr sehr dankbar.

Antworten
Georg C.
  • Forum-Beiträge: 235

09.06.2014, 21:16:02 via Website

Hi
wenn Dir Deine Maturaarbeit wichtig ist, vergiss es die App! und mache was anderes!
Einfaches copy / paste -> ohne zu wissen was man da genau macht, ist NIX!

übrigends ->es fehlt nämlich die abschließende Klammer.

Gruß
Georg

Sorry für Gramatik & Stilistik Fehler.

Antworten
Ramirez
  • Forum-Beiträge: 13

23.06.2014, 09:55:46 via Website

Hi Georg & co,

Ich mache nicht nur copy&paste. Ich versuche es natürlich zu verstehen.

Ich lasse mir von anderen Prjekten eine Idee geben. Natürlich ist nur copy&paste einfach sinnlos.

Ich bin halt einach nicht so erfahren wie ihr und sehe sofort die Fehler.

Laut Theorie sollte ja das stimmen

 private void uploadFile(String filePath, String fileName) {

aber ich sehe den fehler einfach nicht. Fehlermeldung:

Multiple markers at this line
- Syntax error on token "(", ,
expected
- Syntax error on token "(", ,
expected

Ich weiss es gibt einen Klammerfehler, erkenne ihn aber nicht.

Antworten
Fabian Simon
  • Forum-Beiträge: 359

23.06.2014, 10:50:48 via Website

oftmals befinden sich Klammerfehler nicht da wo sie angeziegt werden...
will heißen irgendwo in der Klasse ist der Klammerfehler...

Antworten
Georg C.
  • Forum-Beiträge: 235

24.06.2014, 00:52:34 via Website

...
} else {
Error, no response. <------- Das ist definitiv nicht korrekt

  }

...
vorher hast Du es noch auskomentiert gehabt -> ....?????

} else { // Error, no response.

Kopfschüttelnt

LG
Georg

— geändert am 24.06.2014, 01:00:44

Sorry für Gramatik & Stilistik Fehler.

Antworten