Brauche Hilfe bezüglich Http-Post und JSON

K

korndi

Neues Mitglied
3
Hallo!!

Ich habe schon seit längeren Probleme mit Http-Post und Json.

Deshalb möchte ich euch fragen ob sich jemand zeit nehmen kann(geht nur um den Login).

Das ganze hier reinzustellen ist zu langwierig.

Danke im Vorraus
 
Sorry, aber ich glaube die meisten haben auch keine X-Stunden Zeit um ein Projekt mitzubetreuen ;)

Entweder du schmeißt wie die anderen deinen Code hier rein, oder du lässt es ;)
 
Ok werde es versuchen:

Main Klasse

Code:
public class Main extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //setContentView(R.layout.main);
       startActivityForResult(new Intent(Main.this, Login.class), 1);

    }
}

Login Klasse:


Code:
public class Login extends Activity{
	ProgressDialog pd = null;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		setContentView(R.layout.login);
		
		final EditText user = (EditText)findViewById(R.id.login_etuser);
		final EditText pw = (EditText)findViewById(R.id.login_etpw);
		Button btlogin = (Button)findViewById(R.id.login_btlog);
		final Thread thread = new Thread (){
			public void run() {
				try
				{
				String result = "";
				result = postData(user.getText().toString(),pw.getText().toString());
				if (result != null)
				{
					final JSONObject jObject = new JSONObject(result);
		            JSONObject menuObject = jObject.getJSONObject("responseData");
			    	Log.e("PPP", menuObject.getString("session_id"));
				}
                

		    	//pd.dismiss();
				}
				catch (Exception e)
				{
					Log.e("XXX", e.getMessage());
				}
		    	

				
			};
		};
		
		btlogin.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				
				if (!user.getText().toString().equals("") && !pw.getText().toString().equals(""))
				{
					
					thread.start();
					
				}
				
			}
		});
	}
	public String postData(final String user, final String pw) {
	    // Create a new HttpClient and Post Header
	    HttpClient httpclient = new DefaultHttpClient();
	    HttpPost httppost = new HttpPost("http://surfkid.redio.de/login");
	    String result;
	    BufferedReader in = null;

	    try {
	        // Add your data
	        List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
	        nameValuePairs.add(new BasicNameValuePair("username", user));
	        nameValuePairs.add(new BasicNameValuePair("password", md5(pw)));
	        httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));

	        // Execute HTTP Post Request
	        HttpResponse response = httpclient.execute(httppost);
	        if(response != null){
	        	in = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
	            
	            StringBuffer sb = new StringBuffer("");
	            String line = "";
	            String NL = System.getProperty("line.separator");
	            while ((line = in.readLine()) != null) {
	                sb.append(line + NL);
	            }
	            in.close();
	            
	            result = sb.toString();
	            return result;
	          }
	        
	    } catch (ClientProtocolException e) {
	    	 Log.e("xxx", e.getMessage());
	    } catch (IOException e) {
	        Log.e("xxx2", e.getMessage());
	    }
	    return null;
	}
	 private String md5(String in) {
    	 
	        MessageDigest digest;
	 
	        try {
	 
	            digest = MessageDigest.getInstance("MD5");
	 
	            digest.reset();        
	 
	            digest.update(in.getBytes());
	 
	            byte[] a = digest.digest();
	 
	            int len = a.length;
	 
	            StringBuilder sb = new StringBuilder(len << 1);
	 
	            for (int i = 0; i < len; i++) {
	 
	                sb.append(Character.forDigit((a[i] & 0xf0) >> 4, 16));
	 
	                sb.append(Character.forDigit(a[i] & 0x0f, 16));
	 
	            }
	 
	            return sb.toString();
	 
	        } catch (NoSuchAlgorithmException e) { e.printStackTrace(); }
	 
	        return null;
	 
	    }



}


LogCat:

01-25 10:11:01.891: ERROR/AndroidRuntime(15145): FATAL EXCEPTION: main
01-25 10:11:01.891: ERROR/AndroidRuntime(15145): java.lang.IllegalThreadStateException: Thread already started.
01-25 10:11:01.891: ERROR/AndroidRuntime(15145): at java.lang.Thread.start(Thread.java:1322)
01-25 10:11:01.891: ERROR/AndroidRuntime(15145): at android.skiptvad.Login$2.onClick(Login.java:79)
01-25 10:11:01.891: ERROR/AndroidRuntime(15145): at android.view.View.performClick(View.java:2461)
01-25 10:11:01.891: ERROR/AndroidRuntime(15145): at android.view.View$PerformClick.run(View.java:8888)
01-25 10:11:01.891: ERROR/AndroidRuntime(15145): at android.os.Handler.handleCallback(Handler.java:587)
01-25 10:11:01.891: ERROR/AndroidRuntime(15145): at android.os.Handler.dispatchMessage(Handler.java:92)
01-25 10:11:01.891: ERROR/AndroidRuntime(15145): at android.os.Looper.loop(Looper.java:123)
01-25 10:11:01.891: ERROR/AndroidRuntime(15145): at android.app.ActivityThread.main(ActivityThread.java:4627)
01-25 10:11:01.891: ERROR/AndroidRuntime(15145): at java.lang.reflect.Method.invokeNative(Native Method)
01-25 10:11:01.891: ERROR/AndroidRuntime(15145): at java.lang.reflect.Method.invoke(Method.java:521)
01-25 10:11:01.891: ERROR/AndroidRuntime(15145): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858)
01-25 10:11:01.891: ERROR/AndroidRuntime(15145): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
01-25 10:11:01.891: ERROR/AndroidRuntime(15145): at dalvik.system.NativeStart.main(Native Method)

[/code]


Das Problem ist wenn ich mein Programm zum zweiten mal starte kommt die thread exception da der thread schon läuft. Es ist mir klar das ich einen Thread in Java nur einmal starten kann. Jedoch weiß ich keine Lösung dafür.

MFG
 
Wenn ein Thread einmal beendet(Wird ein Interrupt Flag gesetzt) ist kannst du ihn nicht einfach wieder mit .start() starten.
Du musst ihn mit new neu initialisieren.
Es wird dir helfen alles mit Runnable zu implementieren so z.b (ungetestet und im Notepad geschrieben):

Code:
protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		setContentView(R.layout.login);
		
		final EditText user = (EditText)findViewById(R.id.login_etuser);
		final EditText pw = (EditText)findViewById(R.id.login_etpw);
		Button btlogin = (Button)findViewById(R.id.login_btlog);
		MyRunnable myRunnable = new MyRunnable();
		myRunnable.set..
		
		final Thread thread = new Thread (myRunnable)
		
		btlogin.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				
				if (!user.getText().toString().equals("") && !pw.getText().toString().equals(""))
				{
					if(thread != null && thread.isInterrupted()){
						thread = new Thread(myRunnable);
					}
					thread.start();
					
				}
				
			}
		});
	}

class MyRunnable implements Runnable
{

			//SETTER
			setUserBlabla(String){}


			public void run() {
				try
				{
				String result = "";
				result = postData(user.getText().toString(),pw.getText().toString());
				if (result != null)
				{
					final JSONObject jObject = new JSONObject(result);
		            JSONObject menuObject = jObject.getJSONObject("responseData");
			    	Log.e("PPP", menuObject.getString("session_id"));
				}
                

		    	//pd.dismiss();
				}
				catch (Exception e)
				{
					Log.e("XXX", e.getMessage());
				}
		    	

				
			}

}
 

Ähnliche Themen

D
Antworten
17
Aufrufe
396
datNeMo
D
R
Antworten
4
Aufrufe
727
Rapidoman
R
R
Antworten
9
Aufrufe
730
koje71
koje71
Zurück
Oben Unten