[Hilfe gesucht!] Bei Login einer App

  • Antworten:2
Freshchris01
  • Forum-Beiträge: 5

21.07.2013, 16:43:28 via Website

Hallo, schreibe gerade den Login für meine App.
Dazu benötige ich eine Verbindung über 'HttpRequest' zu meiner API.
Mein Code sieht bis jetzt so aus :

1package com.example.fancytimer;
2
3import java.io.BufferedReader;
4import java.io.IOException;
5import java.io.InputStream;
6import java.io.InputStreamReader;
7
8import org.apache.http.HttpEntity;
9import org.apache.http.HttpResponse;
10import org.apache.http.StatusLine;
11import org.apache.http.client.methods.HttpGet;
12import org.json.JSONException;
13import org.json.JSONObject;
14
15import android.app.Activity;
16import android.net.http.AndroidHttpClient;
17import android.os.Bundle;
18import android.util.Log;
19import android.view.Menu;
20import android.view.View;
21import android.widget.EditText;
22import android.widget.Toast;
23
24public class LoginActivity extends Activity implements Runnable {
25
26 LoginFunctions lf = new LoginFunctions();
27 static InputStream is = null;
28 static JSONObject jObj = null;
29 static String json = "";
30 String myUrl = "";
31 String result;
32 JSONObject resultJSON = null;
33
34 @Override
35 protected void onCreate(Bundle savedInstanceState) {
36 super.onCreate(savedInstanceState);
37 setContentView(R.layout.activity_login);
38 }
39
40 @Override
41 public boolean onCreateOptionsMenu(Menu menu) {
42 // Inflate the menu; this adds items to the action bar if it is present.
43 getMenuInflater().inflate(R.menu.main, menu);
44 return true;
45 }
46
47 public void onBtnClick(View v) {
48
49 if (v.getId() == R.id.btn_login) {
50
51 EditText user = (EditText) findViewById(R.id.txt_username); // Get
52 // userdata
53 EditText pass = (EditText) findViewById(R.id.txt_password);
54
55 String username = user.getText().toString();
56 String password = pass.getText().toString();
57
58 username = username.replace(" ", "");
59 password = password.replace(" ", "");
60
61 if (username.equals("") || password.equals("")) {
62 showInfoDialog("Username oder Passwort überprüfen!");
63 } else {
64 if (!lf.isEmailValid(username)) {
65 showInfoDialog("E-Mail überprüfen!");
66 } else {
67 if (password.length() <= 7) {
68 showInfoDialog("Passwort muss mind. 8 Zeichen haben!");
69 } else {
70 String u5 = lf.getMd5Hash(username);
71 String p5 = lf.getMd5Hash(password);
72 myUrl = " " // Hier steht meine URl mit Parametern
73
74 new Thread(new Runnable() {
75 public void run() {
76 resultJSON = requestData(myUrl);
77 }
78 }).start();
79
80 Log.v("Info", resultJSON.toString());
81 }
82 }
83 }
84 }
85 }
86
87 public void showInfoDialog(String text) {
88 Toast.makeText(this, text, Toast.LENGTH_LONG).show();
89 }
90
91 public JSONObject requestData(String url) {
92 try {
93
94 // Log.v("Info", Thread.currentThread().getName());
95 result = "";
96 AndroidHttpClient client = AndroidHttpClient.newInstance("Anfrage");
97 HttpGet request = new HttpGet(myUrl);
98 HttpResponse response = client.execute(request);
99 StatusLine statusLine = response.getStatusLine();
100 int statusCode = statusLine.getStatusCode();
101 Log.v("Info", statusCode + "");
102 HttpEntity httpEntity = response.getEntity();
103 is = httpEntity.getContent();
104 } catch (IOException e) {
105 Log.v("Info", e.getMessage());
106 }
107
108 try {
109 BufferedReader reader = new BufferedReader(new InputStreamReader(
110 is, "iso-8859-1"), 8);
111 StringBuilder sb = new StringBuilder();
112 String line = null;
113 while ((line = reader.readLine()) != null) {
114 sb.append(line + "\n");
115 }
116 is.close();
117 json = sb.toString();
118 Log.v("Info", json.toString());
119 } catch (Exception e) {
120 Log.e("Buffer Error", "Error converting result " + e.toString());
121 }
122
123 // try parse the string to a JSON object
124 try {
125 jObj = new JSONObject(json);
126 } catch (JSONException e) {
127 Log.e("JSON Parser", "Error parsing data " + e.toString());
128 }
129 return jObj;
130 }
131
132 @Override
133 public void run() {
134 // TODO Auto-generated method stub
135
136 }
137
138}

Jetzt kommt folgende Fehlermeldung bei LogCat:

FATAL EXCEPTION: main
und could noct execute method of the activity.

Den Fehler hatte ich schon einmal, und ich konnte ihn damals mit einme neuen Thread beheben.
Hier benutze ich auch einen Thread für die Verbindung mit dem Internet, allerdings stürtzt die App immer ab.

Vielen Danke schon mal für eure Antworten

Grüße Christian :)

— geändert am 21.07.2013, 17:40:04

Antworten
Christian
  • Forum-Beiträge: 307

21.07.2013, 23:02:07 via Website

Hi Freshchris01de,

ich vermute mal das dies FATAL EXCEPTION: main und could noct execute method of the activity. nicht die ganze Fehlermeldung ist.

Könnte es sein das der wahre Fehler eine java.lang.NullPointerException ist die hier Log.v("Info", resultJSON.toString()); ausgelöst wird?

Threads ermöglichen ein paralleles ab arbeiten deines Codes. Du versuchst aber nun resultJSON auslesen noch bevor es mit Werten gefüllt wurde.

Mfg Christian

— geändert am 21.07.2013, 23:03:00

Antworten
impjor
  • Forum-Beiträge: 1.793

22.07.2013, 00:14:13 via App

1. Du lässt deine Activity Runnable implementieren, warum?
2. Deine request-Methode bekommt einen URL-Parameter, der nicht benutzt wird, lösche lieber das Feld myUrl und benutze den Parameter url.
3. Wie Christian gesagt hat, wird es eine NPE sein, da deine request-Methode in einem eigenen Thread ausgeführt wird (gut:)) und du somit gleichzeitig mit der Log-Ausgabe. Da ein Download immer etwas dauert, ist er damit noch nicht fertig und das Objekt ist noch null.
Mache das lieber so:

1new Thread(new Runnable() {
2 public void run() {
3 resultJSON = requestData(myUrl);
4 Log.v("Info", resultJSON.toString());
5 }
6 }).start();

Aber das würde dir auch das Logcat sagen ;)

Gruß

Liebe Grüße impjor.

Für ein gutes Miteinander: Unsere Regeln
Apps für jeden Einsatzzweck
Stellt eure App vor!

Antworten